在我的存儲過程中,我傳遞一個過濾器(使用「WHERE Column IN」子句)作爲參數。該參數的值以CSV形式給出。將此CSV轉換爲記錄集的最佳方法是什麼?如何將CSV轉換爲T-SQL中的記錄集?
實施例: -
SELECT * FROM Employee WHERE Name IN ('John','Joe','Jerry','James')
,我需要的名稱作爲參數傳遞其是CSV串像
"John,Joe,Jerry,James"
。
在我的存儲過程中,我傳遞一個過濾器(使用「WHERE Column IN」子句)作爲參數。該參數的值以CSV形式給出。將此CSV轉換爲記錄集的最佳方法是什麼?如何將CSV轉換爲T-SQL中的記錄集?
實施例: -
SELECT * FROM Employee WHERE Name IN ('John','Joe','Jerry','James')
,我需要的名稱作爲參數傳遞其是CSV串像
"John,Joe,Jerry,James"
。
看看Erland Sommarskog的文章。他做這種事情的不同方法的深入信息:
創建分割字符串函數
CREATE FUNCTION [dbo].[SplitString]
(
@String VARCHAR(MAX) ,
@Delimiter VARCHAR(10)
)
RETURNS @RetTable TABLE(
String varchar(MAX)
)
AS
BEGIN
DECLARE @i INT ,
@j INT
SELECT @i = 1
WHILE @i <= LEN(@String)
BEGIN
SELECT @j = CHARINDEX(@Delimiter, @String, @i)
IF @j = 0
BEGIN
SELECT @j = LEN(@String) + 1
END
INSERT @RetTable SELECT SUBSTRING(@String, @i, @j - @i)
SELECT @i = @j + LEN(@Delimiter)
END
RETURN
END
在第一個答案的鏈接中提到了拆分功能。 – Faiz 2009-09-16 10:01:25
我知道,但我們使用這個,所以我認爲一個例子會有所幫助 – 2009-09-16 10:48:32
那是一個偉大的職位! – Faiz 2009-09-16 10:17:57