【发布时间】:2020-02-18 16:41:16
【问题描述】:
这个声明的问题
select * from table
where ID in (case when table1.changes = 40 THEN
select top 1 STUFF((SELECT ',' + CAST(ID as varchar) FROM Tabl1
WHERE UserID = 121 FOR XML PATH('')), 1, 1, '')
FROM Tabl1 where UserID = 121
else
id
end
)
使用上面,报错
消息 245,第 16 级,状态 1,第 3 行
将 nvarchar 值 '167,196,107,108,169,111,115,16,162' 转换为数据类型 int 时转换失败。
【问题讨论】:
-
为什么要将整数 ID 转换为分隔字符串?您在这里不需要
STUFF( ... FOR XML),您可以轻松地加入 ID 列并在 UserID 上过滤您的第二个表。请参阅我对简化查询的回答。 -
从答案中的 cmets 来看,我们似乎实际上在这里有一个 XY Problem,或者 OP 只给了我们真正问题的一小部分。他们现在正在引用
CASE不起作用,但是,他们的问题中没有这样的表达。 -
您的问题被否决了,因为您正在回答未在问题中发布的要求的答案。请更新您的问题,向我们展示您实际尝试做的事情以及您认为需要使用
CASE声明的原因。 -
CASE表达毫无意义。该 SQL 永远不会返回该错误。它会产生错误Incorrect syntax near SELECT。WHEN SELECT不是有效的语法。停止滴灌我们,给我们真正的 SQL和真正的问题。
标签: sql sql-server tsql select