【问题标题】:Passing parameters to IN clause in SQL Server [duplicate]将参数传递给 SQL Server 中的 IN 子句 [重复]
【发布时间】:2011-06-11 00:30:18
【问题描述】:

可能的重复:
Parameterizing a SQL IN clause?
SQL Server - In clause with a declared variable

嗨,

我在将参数传递给“IN”子句时遇到问题。我正在使用以下查询。

查询:

SELECT Topics.Topic_Id  FROM Topics 
    Where Topic_Description IN (''+ @Topics +'')    

当参数具有单个值时,此查询有效。我的参数可以用逗号分隔多个值,例如:“一”、“二”、“三”、“四”。但是只要有多个参数,查询就会失败。如何克服这一点?请提出建议。

谢谢

我必须将上述内容用作存储过程的一部分。我必须将选择查询的结果放入如下光标中:

声明 cur_TopicIDs CURSOR FOR SELECT Topics.Topic_Id FROM 主题 Topic_Description IN (''+ @Topics +'')....等

在这种情况下,我该如何使用其他链接中建议的动态 sp

【问题讨论】:

    标签: sql-server-2005 stored-procedures in-clause


    【解决方案1】:

    使用此处的任何拆分功能: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50648

    【讨论】:

    【解决方案2】:

    您必须在@Topics 中创建一个格式为one','two','three 的字符串作为值。

    编辑:- 然后你需要使用EXEC sp_executesql来执行你的sql语句。 spender 为您的问题提供的链接中正确解释了答案。

    【讨论】:

    • 你确定吗? OP 没有明确说明查询是在哪里组装的。
    • @spender - 我自己没有尝试过。但由于它是一个字符串替换,我想这会起作用。因为OP已经添加了第一个'和最后一个'。在这两者之间,我们需要用给定格式的字符串填充它。
    • 这种方法容易受到 SQL 注入的攻击。拆分功能更安全。
    • @Martin - 啊……是的。我想你是对的。我没有考虑 SQL 注入。
    • 我正在创建一个格式为 one','two','three 的字符串作为值,但它仍然无法正常工作
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2011-08-07
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多