gpt4 book ai didi

sql-server - 其中 IN 逗号分隔的字符串

转载 作者:行者123 更新时间:2023-12-02 11:26:32 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Passing a varchar full of comma delimited values to a SQL Server IN function

(26 个回答)


6年前关闭。




我想从临时表#temptable 的完整列表中检索某些用户。
查询如下所示:

DECLARE @List varchar(max)
SELECT @List = coalesce(@List + ',','') + '''' + StaffCode + ''''
FROM tblStaffs

SELECT UserName
FROM #temptable
WHERE #temptable.StaffCode IN (@List)

我可以告诉 @List 是正确的格式:
'AAA','ABB','BBB','CCC','DDD','MMM'

如果我把它改成
WHERE #temptable.StaffCode IN ('AAA','ABB','BBB','CCC','DDD','MMM')

它当然有效,那为什么不IN(@List)呢?

最佳答案

创建一些拆分字符串函数并将逗号分隔的值转换为行,然后您可以使用转换后的行 IN条款

DECLARE @List VARCHAR(max)

SELECT @List = COALESCE(@List + ',', '') +StaffCode
FROM tblStaffs

SELECT UserName
FROM #temptable
WHERE #temptable.StaffCode IN (SELECT split_values
FROM dbo.Splitstring_function(@list))

查询 here用于各种拆分字符串功能

如果您不想创建函数,那么您也可以直接使用代码而不是创建新函数( M.Ali 的 答案)。

另一种方法是使用 dynamic query .
Declare @List varchar(max), @sql nvarchar(max)

Select @List = coalesce(@List + ',','') + '''' + StaffCode + ''''
From tblStaffs

set @sql = '
Select UserName
From #temptable
Where #temptable.StaffCode IN ('+ @List + ')'

--print @sql
exec (@sql)

始终调试动态查询 print执行前的动态sql。

关于sql-server - 其中 IN 逗号分隔的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30512646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com