我認爲唯一可能的解決方案是傳遞逗號分隔的值,您可以使用函數將其轉換爲SQL中的表。下面是我使用
CREATE FUNCTION dbo.CSVToList (@CSV varchar(3000))
RETURNS @Result TABLE (Value varchar(30))
AS
BEGIN
DECLARE @List TABLE
(
Value varchar(30)
)
DECLARE
@Value varchar(30),
@Pos int
SET @CSV = LTRIM(RTRIM(@CSV))+ ','
SET @Pos = CHARINDEX(',', @CSV, 1)
IF REPLACE(@CSV, ',', '') <> ''
BEGIN
WHILE @Pos > 0
BEGIN
SET @Value = LTRIM(RTRIM(LEFT(@CSV, @Pos - 1)))
IF @Value <> ''
INSERT INTO @List (Value) VALUES (@Value)
SET @CSV = RIGHT(@CSV, LEN(@CSV) - @Pos)
SET @Pos = CHARINDEX(',', @CSV, 1)
END
END
INSERT @Result
SELECT
Value
FROM
@List
RETURN
END
,你可以用下面的代碼(例如)執行操作的功能:
DECLARE @CSV varchar(100)
SET @CSV = '30,32,34,36,40'
SELECT
ProductID,
ProductName,
UnitPrice
FROM
Products
WHERE
ProductID IN (SELECT * FROM dbo.CSVToLIst(@CSV))
我把代碼從這裏:http://www.geekzilla.co.uk/view5C09B52C-4600-4B66-9DD7-DCE840D64CBD.htm
希望它幫助。
爲什麼不將值存儲在用逗號分隔的字符串中? – 2012-07-16 16:16:44
@格魯:你確實意識到這個問題已經過了四歲了,我希望。 – 2016-09-07 15:53:45
@ B.ClayShannon:嗨,是的,我只是注意到幾個類似的問題基本上是相同的鏈接問題,所以我經歷了所有這些問題,並將鏈接添加到最舊的鏈接。我沒有任何這些東西,我只是想像我通常那樣做一些清理工作,當我找到一個共同的線程。 – Groo 2016-09-08 07:24:10