向SQL Server传递多个参数

3
我正在尝试使用where in语句在我的数据库中进行搜索,但我的字符串格式如下:

可能是重复问题:
如何对SQL IN语句进行参数化?
在SQL Server 2005中插入逗号分隔值

我想在我的数据库中使用where in子句进行搜索,但我的字符串格式如下:

'233052,57516351,254689'

我需要使用以下查询在我的数据库中进行咨询:
SELECT * FROM myTable WHERE field IN (@list_string)

我该如何执行这个操作?

3
你正在使用哪个版本的SQL Server?我建议阅读Erland Sommarskog的《SQL Server中的数组和列表》(http://www.sommarskog.se/arrays-in-sql.html)。 - Oded
我正在使用SQL Server 2008。 - mcamara
1
然后,表值参数是前进的方法。 - Oded
这个问题之前已经被问过了,可以在这里的答案找到。 - Simon Martin
1
@TonyHopkinson - 对于一个变量值列表,你必须使用其中的一种选项。当涉及到SQL Server时,TVPs可能是最好的选择。 - Oded
显示剩余4条评论
3个回答

5

2

我多年来一直在使用Itai Goldstein的Split函数来处理这种情况。然后你可以执行以下操作:

SELECT * 
FROM [myTable] 
WHERE [field] IN (
    SELECT [Data]
    FROM [dbo].[Split] (@list_string, ',')
);

好的,我会记住这个。 - Tony Hopkinson

0
尝试使用SQL语句连接的EXEC:
declare @sql varchar(200)
set @sql='SELECT * FROM myTable WHERE field IN ('+@list_string+')'
exec(@sql)

1
SQL注入。使用列表中的值计数构建参数化查询Select * from MyTable Where field = @p1 [Or field = @p2],然后将这些值分配给参数作为更安全的选项。 - Tony Hopkinson
@Tony,如果list_string是客户端数据,我同意你的观点。但是,如果list_string源列表是安全的并且已经过验证,那么这将是最快执行和最佳性能查询。 - Atheer Mostafa
或查询需要更长的解析时间,因为它更长,但我怀疑执行时间不会更长。这个注释只是提醒那些一直犯SQL注入错误的人们。 - Tony Hopkinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接