如何在in -子句中使用stuff-function的结果?



我想在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的部分是问题所在。返回正确的值,但不能正确识别,因此没有更新表。

这是带有一些示例日期的表结构

<表类>IDWinnerIDCustomerName代理tbody><<tr>1956019560运货马车的车夫桑松空1968619560男人斯诺登空19404空以斯帖Flansburg空19405空Maximo希尔空2005520055Jeanice摩恩空2005620055Kraig Rochin空

你完全误解了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);

相关内容

  • 没有找到相关文章

最新更新