你可以使用一个用户自定义函数,如
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