我有以下情况:
----------------
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 :(得分: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'''