我想在in子句中使用连接字符串的结果。
这是我的SQL-Query:UPDATE Customer
SET Agent = 'Test'
WHERE CAST(ID AS VARCHAR) IN (
SELECT IIF((
SELECT WinnerID
FROM Customer
WHERE ID = '19560'
) IS NULL, '19560', (
SELECT STUFF((
SELECT ',' + CAST(ID AS VARCHAR)
FROM Customer
WHERE WinnerID = '19560'
FOR XML PATH('')
), 1, 1, '') --returns 19560, 19686
))
)
IIF函数中表达式返回false的部分是问题所在。返回正确的值,但不能正确识别,因此没有更新表。
这是带有一些示例日期的表结构
你完全误解了IN
在这里的工作原理。ID IN ('19560, 19686')
等于ID = '19560, 19686'
。当使用IN
时,您需要返回一个数据集,或者提供一个列表。例如:ID IN (19560, 19686)
.
没有必要使用FOR XML PATH
(不是STUFF
,所有STUFF
所做的是用另一个字符串删除和替换字符串中的字符长度;在本例中,您要删除第一个字符,并用零长度字符串替换它)来创建一个分隔列表,只需按照文档中所示正确使用IN
。
这是你想要的逻辑的一些猜测,因为(尊重)它是一团乱,但也许你只是想要这个
UPDATE C
SET Agent = 'Test'
FROM Customer C
WHERE ID = 19560
OR ID IN (SELECT sq.ID
FROM Customer sq
WHERE sq.WinnerID = 19560);