Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk lulus array ke prosedur yang disimpan SQL Server?

Bagaimana untuk lulus array ke prosedur yang disimpan SQL Server?

Barbara Streisand
Lepaskan: 2025-01-31 08:36:09
asal
323 orang telah melayarinya

How to Pass an Array to a SQL Server Stored Procedure?

lulus array ke prosedur penyimpanan SQL Server

Dalam senario yang perlu lulus data dari C# sebagai array ke prosedur tersimpan SQL Server, terdapat banyak cara. Artikel ini akan meneroka beberapa kaedah, bergantung kepada versi SQL Server yang digunakan.

SQL Server 2016 (atau versi yang lebih tinggi)

menggunakan string_split () atau openjson (), anda boleh lulus senarai pemisahan atau json ke prosedur penyimpanan.

string_split ()

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

  SELECT value FROM STRING_SPLIT(@List, ',');
END
GO
Salin selepas log masuk
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
GO
Salin selepas log masuk
SQL Server 2008 (atau versi yang lebih tinggi)

Jenis data tersuai dan parameter nilai jadual digunakan untuk penghantaran array.

objek pangkalan data SQL

CREATE TYPE dbo.IDList
AS TABLE
(
  ID INT
);
GO

CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List AS dbo.IDList READONLY
AS
BEGIN
  SET NOCOUNT ON;

  SELECT ID FROM @List; 
END
GO
Salin selepas log masuk
c# code

// 获取员工 ID
int[] employeeIds = GetEmployeeIds();

// 创建 DataTable 并使用员工 ID 填充
DataTable tvp = new DataTable();
tvp.Columns.Add(new DataColumn("ID", typeof(int)));
foreach (int id in employeeIds)
    tvp.Rows.Add(id);

// 将 DataTable 作为参数添加
using (conn)
{
    SqlCommand cmd = new SqlCommand("dbo.DoSomethingWithEmployees", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    SqlParameter tvparam = cmd.Parameters.AddWithValue("@List", tvp);
    tvparam.SqlDbType = SqlDbType.Structured;
    tvparam.TypeName = "dbo.IDList";

    // 执行查询
}
Salin selepas log masuk
SQL Server 2005

Pengenalan kepada fungsi pembongkaran tersuai untuk penghantaran array:

fungsi 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
  );
GO
Salin selepas log masuk
Prosedur Penyimpanan <存>

c# code
CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List VARCHAR(MAX)
AS
BEGIN
  SET NOCOUNT ON;

  SELECT EmployeeID = Item FROM dbo.SplitInts(@List, ','); 
END
GO
Salin selepas log masuk

Lulus array sebagai senarai koma.

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

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan