我正在编写一个存储过程,我的目标是让用户输入一个或多个变量,或者就区域而言全部或全部。
我正在尝试将变量设置为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参数返回单个区域,多个区域或全部
答案 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