2013-03-05 122 views
1

我有以下情况:存储过程的where子句参数

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

+0

事端这样吗? http://stackoverflow.com/questions/15024219/conversion-failed-in-cursor-in-stored-procedure/15038078#15038078 – bummi 2013-03-05 11:31:33

+0

你知道单个字符串参数之间有一个逻辑上的区别,它可能碰巧包含' '和','字符和多个字符串参数,用逗号分隔? – 2013-03-05 11:37:15

回答

1

您可以使用:

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

DECLARE @SQL NVARCHAR(4000) 
SET @SQL='SELECT * from table_name where typ in ('[email protected]+')' 
EXEC(@SQL) 

然后执行:

DECLARE @return_value int 
EXEC @return_value = [myProc] 
     @typy = N'''AB'',''BC''' 
相关问题