我试图将匹配的大小写值放在T-SQL中的变量中。 所以我的情况是 如果案例是MATCHED,则应将其保留在变量中,否则应跳过case语句。 所以我试图连接所有匹配的情况,并将结果保存在一个@Result变量中。 这是我的SQL查询:
declare @result varchar(200)
set @result=''
select
case
when 1=1 then @result=@result+'CASE 1'
when 1=2 then @result=@result+'CASE 2'
when 2=2 then @result=@result+'CASE 3'
end
在这里,我需要一个类似的结果: 情况1 ;情况3 由于情况1和情况3是匹配的,情况2是不匹配的。
但是运行此查询后,我收到了错误消息:
信息102,级别15,状态1,第8行在'='附近的语法不正确。
有人可以帮助我运行此查询吗?
答案 0 :(得分:0)
这不能使用大小写来完成,但是可以使用if语句轻松完成...
declare @result varchar(200)
set @result=''
if (1=1)
set @result = @result+'CASE 1'
if(1=2)
set @result=@result+'CASE 2'
if (2=2)
set @result=@result+'CASE 3'
print @result
答案 1 :(得分:0)
不幸的是,CASE在SQL Server中无法像这样工作。 CASE仅返回一个值,并且赋值不在案例范围内。同样,只要匹配CASE,CASE语句就会终止。例如,考虑以下CASE语句:
SELECT CASE
WHEN 1 = 1
THEN 1
WHEN 1 = 2
THEN 2
WHEN 2 = 2
Then 22
END
此输出为1,因为在第一个匹配之后,CASE语句退出。
如果您需要多个CASE之一的输出,则需要使用多个IF语句而不是嵌套的CASE语句,即:
IF 1=1 then @result=@result+'CASE 1'
IF 1=2 then @result=@result+'CASE 2'
IF 2=2 then @result=@result+'CASE 3'
答案 2 :(得分:0)
您可以像这样使用case
:
select @result = @result +
(case when 1=1 then 'CASE 1' else '' end) +
(case when 1=2 then 'CASE 2' else '' end) +
(case when 2=2 then 'CASE 3' else '' end) ;