ホームページ >バックエンド開発 >C++ >配列をSQL Serverストアドプロシージャに渡すにはどうすればよいですか?

配列をSQL Serverストアドプロシージャに渡すにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-31 08:46:13400ブラウズ

How Can I Pass Arrays into SQL Server Stored Procedures?

配列をSQL Serverストレージ手順に渡す

配列はSQLサーバーストレージプロセスに渡されます。従業員リストをテーブルとして使用して他のテーブルに接続するなど、さまざまなシナリオで非常に役立ちます。この記事では、SQL Serverのさまざまなバージョンに従って配列をストレージ手順に渡すさまざまな方法について説明します。

SQL Server 2016(または高バージョン)

SQL Server 2016およびHigherバージョンの場合、分離リストまたはJSONを渡して、

string_split()

または関数を使用できます。

SQL SERVER 2008(または高バージョン)
<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>
SQL Server 2008以上のバージョンでは、ユーザー定義タイプ(UDT)を作成して配列を表すことができます。
<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 2005

SQL Server 2005を使用している場合、カスタム関数を使用してリストを分割できます。
<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>

概要:

<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。