首頁 > 後端開發 > C++ > 如何將數組傳遞到SQL Server存儲的過程中?

如何將數組傳遞到SQL Server存儲的過程中?

Linda Hamilton
發布: 2025-01-31 08:46:13
原創
335 人瀏覽過

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() 函數。

<code class="language-sql">-- STRING_SPLIT() 示例
CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List varchar(max)
AS
BEGIN
  SET NOCOUNT ON;

  SELECT value FROM STRING_SPLIT(@List, ',');
END</code>
登入後複製
<code class="language-sql">-- 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</code>
登入後複製

SQL Server 2008(或更高版本)

在 SQL Server 2008 及更高版本中,您可以創建用戶定義類型 (UDT) 來表示數組。

<code class="language-sql">-- 创建 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</code>
登入後複製

SQL Server 2005

如果您使用的是 SQL Server 2005,則可以使用自定義函數來分割列表。

<code class="language-sql">-- 创建函数
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
  );</code>
登入後複製
<code class="language-sql">-- 创建存储过程
CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List VARCHAR(MAX)
AS
BEGIN
  SET NOCOUNT ON;

  SELECT EmployeeID = Item FROM dbo.SplitInts(@List, ','); 
END</code>
登入後複製

總結:

使用表值參數 (TVP) 的方法簡化了使用它的解決方案的可維護性,並且與包括 XML 和字符串分割在內的其他實現相比,通常具有更高的性能。這涉及與創建用戶定義 XML 模式類似的步驟,但在經驗中,它更容易管理、維護和閱讀。

以上是如何將數組傳遞到SQL Server存儲的過程中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板