我想知道如何传递 ArrayList、List <int
> 或 StringBuilder 逗号分隔列表到存储过程,以便我使用 IN() 查找 ID 列表:
@myList varchar(50)
SELECT *
FROM tbl
WHERE Id IN (@myList)
在 C# 中,我当前正在将列表构建为以逗号分隔的字符串;但是,例如,当使用 nvarchar(50) 作为存储过程中参数的类型时 - 我收到错误,因为它无法将 '1,2,3' 转换为 IN() 之间期望的 int。
有什么想法吗?非常感激。
皮特
最佳答案
您可以使用用户定义的函数,例如
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
它接受 nvarchar 逗号分隔的 id 列表,并以整数形式返回这些 id 的表。然后,您可以像这样加入存储过程中返回的表 -
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
关于c# - SQL Server (2008) 将 ArrayList 或字符串传递给 SP 以进行 IN(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/519769/