如何使用SQL Server用逗号分隔字符串?

时间:2017-07-15 10:16:21

标签: sql sql-server stored-procedures

我想用逗号分隔字符串。实际上我想过滤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循环中运行我的查询,这将使记录正确吗?

那么,我如何用逗号

分隔字符串

3 个答案:

答案 0 :(得分:3)

您可以尝试使用xml路径进行拆分,如下所示:

   <?php $ii++ ?>
   <input type="hidden" name="object[<?php echo $ii ?>]" value="0">
   <input type="checkbox" name="obbject[<?php echo $ii ?>]" value="1">

如果您在SQL Server&gt; = 2016中,可以使用STRING_SPLIT(),如下所示:

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) 

答案 1 :(得分:0)

这是一个很好的解决方案 - Converting String List into Int List in SQL。这里的想法是将int列表作为XML参数发送到存储过程。

这是另一个快速但又肮脏的解决方案 - t-sql Convert comma separated string into int, without using user created function。这里传入的值在动态sql语句中使用。

更多想法 - http://sql-articles.com/scripts/function-to-split-comma-separated-string-to-integer/

答案 2 :(得分:0)

使用动态SQL

exec 'SELECT * FROM SampleTable WHERE class in (' + @class + ')'

将字符串拼接在一起,然后像这样执行:

SELECT * FROM SampleTable WHERE class in (12,22,45,66)