使用“IN”运算符进行sql查询的动态参数

时间:2012-10-24 11:48:34

标签: sql-server tsql stored-procedures sqlparameters

我有一个ASP.NET网站(c#),在代码隐藏中,我想使用SQL http://www.w3schools.com/sql/sql_in.asp中的IN运算符从我的数据库中获取数据。

语法为:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)

我使用存储过程来获取数据,在我运行的这个过程中,最后是select。

我的问题是如何动态构建查询的(value1, value2, ...)部分?如何以SqlParameter(s)的形式发送IN运算符中显示的值?

存储过程的定义如下:

CREATE PROCEDURE [dbo].[GetAllUsers]
    @ORGANIZATION_ID int = null
AS
BEGIN
    SET NOCOUNT ON;

    begin
       SELECT * 
       from USERS
       where ORGANIZATION_ID = @ORGANIZATION_ID
    end
END

我想用以下内容替换WHERE子句:

WHERE ORGANIZATION in (xxxxxxxxxxxxx)

怎么做?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用动态sql:

CREATE PROCEDURE [dbo].[GetAllUsers]
    @ORGANIZATION_ID varchar(max) = null
AS
BEGIN
    declare @sql varchar(max)
    @sql = 'SELECT * 
            from USERS
            where ORGANIZATION_ID in ('+@ORGANIZATION_ID+')' 
    SET NOCOUNT ON;
        begin
          exec(@sql)  
        end
END

您必须将@ORGANIZATION_ID的类型更改为varchar并使用

运行该过程

一个id:

exec '1' 

或ID列表:

exec '1,2,3,4'