我认为唯一可能的解决方案是传递逗号分隔的值,您可以使用函数将其转换为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