gpt4 book ai didi

c# - SQL Server (2008) 将 ArrayList 或字符串传递给 SP for IN()

转载 作者:搜寻专家 更新时间:2023-10-30 20:13:47 25 4
gpt4 key购买 nike

我想知道如何传递 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 for IN(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/519769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com