我想用逗号分隔字符串。实际上我想过滤WHERE
子句,例如
CREATE PROC spGetRecords
@class varchar(50)
AS
BEGIN
SELECT *
FROM SampleTable
WHERE class in (@class) --in Database class is an integer
END
所以,我想在执行查询时传递参数,如下所示
spGetRecords @class = '12,22,45,66'
我认为在我的情况下不可能在单个参数中传递多个值。
那么,如果我删除','
分隔字符串,那么我可以在 while 循环中运行我的查询,这将使记录正确?
那么,如何用逗号分隔字符串
您可以尝试使用 xml 路径进行拆分,如下所示:
Declare @delimiter nvarchar(max) = ','
Declare @str nvarchar(max) = '12,22,45,66'
Declare @xml as xml
Select @xml = CAST('<x>' + REPLACE((SELECT REPLACE(@str,@delimiter,'$$$SSText$$$') AS [*] FOR XML PATH('')),'$$$SSText$$$','</x><x>')+ '</x>' AS XML)
--select @xml
Select y.value(N'text()[1]', N'nvarchar(MAX)') as value
FROM @xml.nodes(N'x') as x(y)
如果您在 SQL Server>= 2016 中,则可以按如下方式使用 STRING_SPLIT():
Select * from string_split('12,22,45,66',',')
使用动态 SQL
exec 'SELECT * FROM SampleTable WHERE class in (' + @class + ')'
它将把字符串修补在一起,然后像这样执行它:
SELECT * FROM SampleTable WHERE class in (12,22,45,66)
这是一个很好的解决方案 - 在SQL中将字符串列表转换为Int List。这里的想法是将 int 列表作为 XML 参数发送到存储过程。
这是另一个快速但肮脏的解决方案 - t-sql 将逗号分隔的字符串转换为 int,而无需使用用户创建的函数。此处,传入的值在动态 sql 语句中使用。
更多想法 - http://sql-articles.com/scripts/function-to-split-comma-separated-string-to-integer/