首页 > 后端开发 > C++ > 如何将数组传递到SQL Server存储的过程中?

如何将数组传递到SQL Server存储的过程中?

Linda Hamilton
发布: 2025-01-31 08:46:13
原创
402 人浏览过

How Can I Pass Arrays into SQL Server Stored Procedures?

将数组传递到 SQL Server 存储过程

将数组传递到 SQL Server 存储过程在各种场景中都非常有用,例如使用员工列表作为表来与其他表连接。本文探讨了根据不同版本的 SQL Server 将数组传递到存储过程的不同方法。

SQL Server 2016(或更高版本)

对于 SQL Server 2016 及更高版本,您可以传递分隔列表或 JSON,并使用 STRING_SPLIT()OPENJSON() 函数。

-- STRING_SPLIT() 示例
CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List varchar(max)
AS
BEGIN
  SET NOCOUNT ON;

  SELECT value FROM STRING_SPLIT(@List, ',');
END
登录后复制
-- OPENJSON() 示例
CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List varchar(max)
AS
BEGIN
  SET NOCOUNT ON;

  SELECT value FROM OPENJSON(CONCAT('["',
    REPLACE(STRING_ESCAPE(@List, 'JSON'), 
    ',', '","'), '"]')) AS j;
END
登录后复制

SQL Server 2008(或更高版本)

在 SQL Server 2008 及更高版本中,您可以创建用户定义类型 (UDT) 来表示数组。

-- 创建 UDT
CREATE TYPE dbo.IDList
AS TABLE
(
  ID INT
);

-- 创建存储过程
CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List AS dbo.IDList READONLY
AS
BEGIN
  SET NOCOUNT ON;

  SELECT ID FROM @List; 
END
登录后复制

SQL Server 2005

如果您使用的是 SQL Server 2005,则可以使用自定义函数来分割列表。

-- 创建函数
CREATE FUNCTION dbo.SplitInts
(
   @List      VARCHAR(MAX),
   @Delimiter VARCHAR(255)
)
RETURNS TABLE
AS
  RETURN ( SELECT Item = CONVERT(INT, Item) FROM
      ( SELECT Item = x.i.value('(./text())[1]', 'varchar(max)')
        FROM ( SELECT [XML] = CONVERT(XML, '<i>'
        + REPLACE(@List, @Delimiter, '</i><i>') + '</i>').query('.')
          ) AS a CROSS APPLY [XML].nodes('i') AS x(i) ) AS y
      WHERE Item IS NOT NULL
  );
登录后复制
-- 创建存储过程
CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List VARCHAR(MAX)
AS
BEGIN
  SET NOCOUNT ON;

  SELECT EmployeeID = Item FROM dbo.SplitInts(@List, ','); 
END
登录后复制

总结:

使用表值参数 (TVP) 的方法简化了使用它的解决方案的可维护性,并且与包括 XML 和字符串分割在内的其他实现相比,通常具有更高的性能。这涉及与创建用户定义 XML 模式类似的步骤,但在经验中,它更容易管理、维护和阅读。

以上是如何将数组传递到SQL Server存储的过程中?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板