Tôi nghĩ giải pháp duy nhất có thể là chuyển các giá trị được phân cách bằng dấu phẩy, mà bạn có thể chuyển đổi thành một bảng trong SQL bằng cách sử dụng hàm. Đây là chức năng Tôi đang sử dụng
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
và bạn có thể sử dụng đoạn mã sau (ví dụ) để thực hiện các hoạt động:
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))
tôi lấy mã từ đây: http://www.geekzilla.co.uk/view5C09B52C-4600-4B66-9DD7-DCE840D64CBD.htm
Hy vọng nó giúp.
Nguồn
2012-07-16 16:13:46
tại sao không được lưu trữ các giá trị trong một chuỗi được phân tách bằng dấu phẩy? –
@Groo: Bạn nhận ra câu hỏi này đã hơn bốn tuổi, tôi hy vọng. –
@ B.ClayShannon: hi, vâng, tôi chỉ đơn giản nhận thấy rằng một số câu hỏi tương tự về cơ bản là cùng một câu hỏi được liên kết vì vậy tôi đã đi qua tất cả chúng và thêm liên kết vào cái cũ nhất. Tôi không có bất cứ điều gì với một trong số này, tôi chỉ muốn làm một số dọn dẹp như tôi thường làm khi tôi tìm thấy một sợi chung. – Groo