我正在尝试使此示例正常运行,但每次都会失败并显示不良响应。您能告诉我为什么吗?谢谢
DECLARE @CARACS NVARCHAR(max) = 'DLV, DLC'
SELECT
CASE
WHEN 'DLV' IN (@CARACS)
THEN 'GOOD'
ELSE 'BAD'
END
答案 0 :(得分:1)
这是问题... DECLARE @CARACS NVARCHAR(max)='DLV,DLC'。 唯一可行的方法是将其拆分……因为DLV永远不会与SQL Server'DLV,DLC'等于'DLV,DLC'一样。
DECLARE @CARACS1 NVARCHAR(max) = 'DLV', @CARACS2 NVARCHAR(max) = 'DLC'
SELECT
CASE
WHEN 'DLV' = @CARACS1 OR 'DLV' = @CARACS2
THEN 'GOOD'
ELSE 'BAD'
END
答案 1 :(得分:1)
这里有2个查询,如果您能够找到它们之间的区别,那么您将理解为什么查询返回“ Bad”值:
SELECT
CASE
WHEN 'DLV' IN ('DLV, DLC')
THEN 'GOOD'
ELSE 'BAD' END
SELECT
CASE
WHEN 'DLV' IN ('DLV', 'DLC')
THEN 'GOOD'
ELSE 'BAD' END
说明:
“ DLV,DLC”-是一个值。
'DLV','DLC'-两个值。
因此,将“ DLV,DLC”转换为几个单独的值,您需要使用拆分器功能。
(我使用了Jeff Moden的分离器-DelimitedSplit8K)
DECLARE @CARACS VARCHAR(8000) = 'DLV,DLC'
SELECT
CASE
WHEN 'DLV' IN (select * from dbo.DelimitedSplit8K(@CARACS,','))
THEN 'GOOD'
ELSE 'BAD'
END