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