你可以使用一個用戶自定義函數,如
CREATE function [dbo].[csl_to_table] (@list nvarchar(MAX))
RETURNS @list_table TABLE ([id] INT)
AS
BEGIN
DECLARE @index INT,
@start_index INT,
@id INT
SELECT @index = 1
SELECT @start_index = 1
WHILE @index <= DATALENGTH(@list)
BEGIN
IF SUBSTRING(@list,@index,1) = ','
BEGIN
SELECT @id = CAST(SUBSTRING(@list, @start_index, @index - @start_index) AS INT)
INSERT @list_table ([id]) VALUES (@id)
SELECT @start_index = @index + 1
END
SELECT @index = @index + 1
END
SELECT @id = CAST(SUBSTRING(@list, @start_index, @index - @start_index) AS INT)
INSERT @list_table ([id]) VALUES (@id)
RETURN
END
它接受逗號分隔的ID列表一個nvarchar並返回這些ID爲int的表。然後,您可以在返回的表中加入您的存儲過程,像這樣 -
DECLARE @passed_in_ids TABLE (id INT)
INSERT INTO @passed_in_ids (id)
SELECT
id
FROM
[dbo].[csl_to_table] (@your_passed_in_csl)
SELECT *
FROM
myTable
INNER JOIN
@passed_in_ids ids
ON
myTable.id = ids.id
我已經把函數調用的id放到表變量中,以防您需要在存儲過程的多個地方使用這些值,您只需要調用一次函數 – 2009-02-06 10:54:20