存储过程where子句参数

时间:2013-03-05 11:21:32

标签: sql sql-server

我有以下情况:

----------------
ID    |    Type
----------------
1     |    AB
2     |    CD
3     |    EF

现在,我在存储过程中对此查询所需的查询是:

SELECT * FROM Table_Name WHERE TYPE IN ('AB','CD','EF')

我写了以下程序:

CREATE PROCEDURE dbo.usp_get_all
  @Type    VARCHAR(200)
AS
BEGIN
  SELECT * FROM Table_Name WHERE TYPE IN (@Type)
END

只有当我以下面的方式调用它时,此查询才能正常工作:

EXEC usp_get_all 'AB'

现在,可能会出现以下情况,但无效

EXEC usp_get_all '''AB'',''CD'',''EF'''

我的问题:

我不想使用任何函数来分割逗号分隔的输入参数。只有使用输入参数我才能获得相同的结果,如:

SELECT * FROM Table_Name WHERE TYPE IN ('AB','CD','EF')

有什么办法可以解决这个问题吗?我可以使用动态SQL吗?如果可以,我在这种情况下如何使用它?

1 个答案:

答案 0 :(得分:1)

您可以使用:

CREATE PROCEDURE myProc (@typy NVARCHAR(299))
AS

DECLARE @SQL NVARCHAR(4000)
SET @SQL='SELECT * from table_name where typ in ('+@typy+')'
EXEC(@SQL)

然后执行:

DECLARE @return_value int
EXEC    @return_value = [myProc]
        @typy = N'''AB'',''BC'''