【问题标题】:Passing Multiple Parameters to SQL Server [duplicate]将多个参数传递给 SQL Server [重复]
【发布时间】:2012-12-12 21:50:44
【问题描述】:

可能重复:
Parameterizing an SQL IN clause?
Comma-separated value insertion In SQL Server 2005

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

'233052,57516351,254689'

我需要使用以下查询在我的数据库中进行咨询:

SELECT * FROM myTable WHERE field IN (@list_string)

我该如何做这个动作?

【问题讨论】:

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

我多年来一直在使用Itai Goldstein's Split function 来应对这种情况。然后您可以执行以下操作:

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

【讨论】:

  • 很好,我会记住那个的。
【解决方案2】:

试试EXEC的sql语句拼接:

declare @sql varchar(200)
set @sql='SELECT * FROM myTable WHERE field IN ('+@list_string+')'
exec(@sql)

【讨论】:

  • Sql 注入。构建参数化查询 Select * from MyTable Where field = @p1 [Or field = @p2] 使用列表中的值计数,然后将值分配给参数作为更安全的选项。
  • @Tony 我同意如果 list_string 是客户端数据,但如果 list_string 源列表是安全的并且已经过验证,这将是最快的执行和最佳性能查询。
  • 或者查询需要更长的时间来解析,因为它更长,但怀疑它会花费更长的时间来执行。该评论只是对许多一直存在 sql 注入错误的人的提醒。
【解决方案3】:

使用Table-valued parameters,在 SQL Server 2008 中引入。

这些可让您传入可用于查询的表结构。

对于其他选项,我建议阅读 Erland Sommarskog 的 Arrays and Lists in SQL Server

【讨论】:

    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2013-07-17
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多