我已經在過去遇到這個問題也發現了一些意見在網絡上解決這個問題。我找到的解決方案是解析輸入字符串中的各個值,將它們作爲行放入臨時表中,然後使用帶有IN子句的子查詢來獲取值。以下是我正在使用的代碼的簡化。它假定來自IN子句的值是smallint,使用varchar可能會相當容易改變。
有關進一步的參考,請參閱this文章用不同的方法來解決這個問題。
DECLARE @TempList table
(
Enum smallint
)
DECLARE @Enum varchar(10), @Pos int
SET @ValueList = LTRIM(RTRIM(@ValueList))+ ','
SET @Pos = CHARINDEX(',', @ValueList, 1)
IF REPLACE(@ValueList, ',', '') ''
BEGIN
WHILE @Pos > 0
BEGIN
SET @Enum = LTRIM(RTRIM(LEFT(@ValueList, @Pos - 1)))
IF @Enum ''
BEGIN
INSERT INTO @TempList (Enum) VALUES (CAST(@Enum AS smallint)) --Use Appropriate conversion
END
SET @ValueList = RIGHT(@ValueList, LEN(@ValueList) - @Pos)
SET @Pos = CHARINDEX(',', @ValueList, 1)
END
END
SELECT *
FROM ExampleTable
WHERE
ExampleTable.Enum in (select Enum from @TempList)
我想這樣做這樣的,但不是使用EXEC我打算使用EXECUTE @ErrorCode = sp_executesql的@sql,這樣我可以得到一個錯誤響應知道如果我需要回滾代碼我」正在執行。 – 2009-02-10 18:34:50