2013-03-05 125 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''' 
相關問題