如何使用多个if语句构建Case语句?

时间:2019-09-11 15:00:39

标签: sql sql-server tsql

我的网站上有一个复选框列表。我将复选框的值传递给@State。如果仅选中一个复选框,则下面的代码有效,但选中多个复选框时,则无效。

我尝试使用case语句,但构建失败,但出现诸如“关键字'update'附近的语法不正确”之类的错误

[('france', 'brazil'),
 ('france', 'usa'),
 ('france', 'uk'),
 ('france', 'canada'),
 ('france', 'mexico'),
 ('france', 'angola'),
 ('brazil', 'france'),
 ('brazil', 'usa'),
 ('brazil', 'uk'),
 ('brazil', 'canada'),
 ('brazil', 'mexico'),
 ('brazil', 'angola'),
 ('usa', 'france'),
 ('usa', 'brazil'),
 ('usa', 'uk'),
 ('usa', 'canada'),
 ('usa', 'mexico'),
 ('usa', 'angola'),
 ('uk', 'france'),
 ('uk', 'brazil'),
 ('uk', 'usa'),
 ('uk', 'canada'),
 ('uk', 'mexico'),
 ('uk', 'angola'),
 ('canada', 'france'),
 ('canada', 'brazil'),
 ('canada', 'usa'),
 ('canada', 'uk'),
 ('canada', 'mexico'),
 ('canada', 'angola'),
 ('mexico', 'france'),
 ('mexico', 'brazil'),
 ('mexico', 'usa'),
 ('mexico', 'uk'),
 ('mexico', 'canada'),
 ('mexico', 'angola'),
 ('angola', 'france'),
 ('angola', 'brazil'),
 ('angola', 'usa'),
 ('angola', 'uk'),
 ('angola', 'canada'),
 ('angola', 'mexico')]

如果用户选中A和D,则结果需要将两者放在一起。

1 个答案:

答案 0 :(得分:1)

如果您将多个答案串联在一起,则可以使用+ =附加到以前的更新中:

IF(@State LIKE '%D%')
BEGIN
Update Users set FilterState += 'Ohio' where Email = '[User:Email]'
END

为避免对该表进行多次更新,如果要构建一个字符串,我会事先在变量中进行字符串连接,然后进行更新,例如:

DECLARE @filterState VARCHAR(200)
SET @filterState = CASE WHEN @State LIKE '%A%' THEN 'Michigan' ELSE '' END
                 + CASE WHEN @State LIKE '%B%' THEN 'Texas, Louisiana, Arkansas, Oklahoma, Kansas, Missouri' ELSE '' END
                --etc

Update Users 
set FilterState = @filterState
where Email = '[User:Email]'