1

我有以下情况:

----------------
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 吗?如果可以,在这种情况下我该如何使用它?

4

1 回答 1

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'''
于 2013-03-05T11:48:51.763 回答