Rumah >pembangunan bahagian belakang >C++ >Bagaimana saya boleh lulus array ke dalam prosedur tersimpan SQL Server?

Bagaimana saya boleh lulus array ke dalam prosedur tersimpan SQL Server?

Linda Hamilton
Linda Hamiltonasal
2025-01-31 08:46:13378semak imbas

How Can I Pass Arrays into SQL Server Stored Procedures?

lulus array ke prosedur penyimpanan SQL Server

Arahan diserahkan kepada proses penyimpanan SQL Server sangat berguna dalam pelbagai senario, seperti menggunakan senarai pekerja sebagai jadual untuk disambungkan ke jadual lain. Artikel ini membincangkan kaedah yang berbeza untuk meluluskan array ke prosedur penyimpanan mengikut versi SQL Server yang berlainan.

SQL Server 2016 (atau versi yang lebih tinggi)

Untuk SQL Server 2016 dan versi yang lebih tinggi, anda boleh lulus senarai pemisahan atau json, dan gunakan

string_split () atau openjson () fungsi.

<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 (atau versi yang lebih tinggi)

Dalam SQL Server 2008 dan versi yang lebih tinggi, anda boleh membuat Jenis Definisi Pengguna (UDT) untuk mewakili array.

<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

Jika anda menggunakan SQL Server 2005, anda boleh menggunakan fungsi tersuai untuk membahagikan senarai.

<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>
Ringkasan:

Kaedah menggunakan parameter nilai jadual (TVP) memudahkan penyelenggaraan penyelesaian untuk menggunakannya, dan biasanya lebih tinggi daripada pelaksanaan lain termasuk bahagian XML dan rentetan. Ini melibatkan langkah yang sama dengan mewujudkan mod XML yang ditentukan oleh pengguna, tetapi dalam pengalaman, lebih mudah untuk mengurus, mengekalkan dan membaca.

Atas ialah kandungan terperinci Bagaimana saya boleh lulus array ke dalam prosedur tersimpan SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn