gpt4 book ai didi

sql-server-2005 - 为一个 SQL 参数传递多个值

转载 作者:行者123 更新时间:2023-12-04 07:19:43 24 4
gpt4 key购买 nike

我有一个 CheckBoxList,用户可以在其中从列表中选择多个项目。然后我需要能够将这些值传递给我的存储过程,以便它们可以在 WHERE 条件中使用,例如:

WHERE ID IN (1,2,3)

我尝试这样做,使其成为 nvarchar 参数,并且我将字符串 1,2,3 传递给:
WHERE ID IN (@IDs)

但这返回了以下错误:
Conversion failed when converting the nvarchar value '1,2,3' to data type int

任何帮助将非常感激!

最佳答案

有几种方法可以做到。
您可以将参数作为 XML blob 传入,如下例所示:

CREATE PROCEDURE [dbo].[uspGetCustomersXML]
@CustomerIDs XML
AS
BEGIN
SELECT c.ID, c.Name
FROM [dbo].[Customer] c
JOIN @CustomerIDs.nodes('IDList/ID') AS x(Item) ON c.ID = Item.value('.', 'int' )
END
GO

--Example Use:
EXECUTE [dbo].[uspGetCustomersXML] '<IDList><ID>1</ID><ID>10</ID><ID>100</ID></IDList>'

或者将值作为 CSV 传递并使用拆分函数将值拆分为表变量(那里有很多拆分函数,快速搜索会抛出一个)。
CREATE PROCEDURE [dbo].[uspGetCustomersCSV]
@CustomerIDs VARCHAR(8000)
AS
BEGIN
SELECT c.Id, c.Name
FROM [dbo].[Customer] c
JOIN dbo.fnSplit(@CustomerIDs, ',') t ON c.Id = t.item
END
GO

--Example Use:
EXECUTE [dbo].[uspGetCustomersCSV] '1,10,100'

如果您使用的是 SQL 2008 或更高版本,则可以使用表值参数,它允许您将 TABLE 变量作为参数传入。我 blogged 不久前关于这 3 种方法,并进行了快速的性能比较。

关于sql-server-2005 - 为一个 SQL 参数传递多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4624398/

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