如何选择@variable中的列?

时间:2019-05-21 20:00:30

标签: sql-server tsql

我正在编写一个存储过程,我的目标是让用户输入一个或多个变量,或者就区域而言全部或全部。

我正在尝试将变量设置为region列中的所有值

DECLARE @REGION TABLE
(
REGION VARCHAR(100)
)
INSERT INTO
@REGION
SELECT * FROM Region_Table

DECLARE @REGION VARCHAR(MAX)
SET @REGION = ''

    IF ( @REGION = '' )
        OR ( @REGION = NULL ) 
        SELECT  @REGION = 'ALL AREAS'  

Select * from #table
    WHERE   Region = @Region
            OR @Region = 'ALL AREAS' 

我希望我的region参数返回单个区域,多个区域或全部

2 个答案:

答案 0 :(得分:0)

要将行中的所有列都放入变量中,请使用以下方法:

_

请注意,您不能使用SELECT *(选择所有列)将其插入表变量的单个列中。 SELECT *通常被认为是不好的做法,最好为列命名。

如果某些列不是varchar类型,则需要像这样强制转换:

declare @table_variable table(all_columns varchar(max));

insert into @table_variable(all_columns)
select column1 + column2 + column3 from table1;

在检查NULL时,例如,使用“ IS NULL”而不是“ = NULL”

select cast(column1 as varchar(100)) + cast(column2 as varchar(5)) from table1;

最后,变量名必须唯一,您不能在同一批中声明两个@region变量。

答案 1 :(得分:0)

我将假设您要使用一个变量来处理输入,就区域而言,可以是单个变量,多个变量或全部,所以为什么要声明一个变量并使用逗号分隔的方法。

您的输入变量如下:-

Declare @Region varchar(100)='A,B,C' --3 regions comma seperated 
--Declare @Region varchar(100)='A' -- or one only  
--Declare @Region varchar(100)=NULL -- or null for all,

我将假设您有一个区域表,其中包含您要返回的其他列,因此我将假设一个表和一些数据进行测试。 (您不会执行此步骤)

Declare @RegionTable Table (RegionId int,Region varchar(50), otherdata varchar(100))
insert into @RegionTable values 
(1,'A','AAAA'),
(2,'B','BBBB'),
(3,'C','CCCC'),
(4,'D','DDDD'),
(5,'E','EEEE'),
(6,'F','FFFF')

现在,我们需要一个可以处理一个,多个或全部变量的选择。这会有所帮助:-

Select * from @RegionTable r where Region in (select cs.[Value] from  STRING_SPLIT (@Region, ',') cs ) or @Region is null

结果将是多个结果,如下所示:-

RegionId    Region  otherdata
1   A   AAAA
2   B   BBBB
3   C   CCCC