Heim > Backend-Entwicklung > C++ > Wie übergeben Sie ein Array an einen SQL Server gespeicherten Prozedur?

Wie übergeben Sie ein Array an einen SQL Server gespeicherten Prozedur?

Barbara Streisand
Freigeben: 2025-01-31 08:36:09
Original
252 Leute haben es durchsucht

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

Übergeben Sie das Array an die SQL Server -Speicherverfahren

In dem Szenario, in dem Daten von C# als Array an SQL Server gespeichert werden müssen, gibt es viele Möglichkeiten. In diesem Artikel werden je nach verwendeter SQL Server -Version verschiedene Methoden untersucht.

SQL Server 2016 (oder höhere Version)

Verwenden von String_Split () oder OpenJSON () können Sie die Trennliste oder JSON an die Speichervorgangsübernahme übergeben.

string_split ()

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

  SELECT value FROM STRING_SPLIT(@List, ',');
END
GO</code>
Nach dem Login kopieren

openjson ()

<code class="language-sql">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</code>
Nach dem Login kopieren

SQL Server 2008 (oder höhere Version)

benutzerdefinierte Datentyp- und Tabellenwertparameter werden für die Array -Übertragung verwendet.

SQL -Datenbankobjekt

<code class="language-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</code>
Nach dem Login kopieren

C# Code

<code class="language-csharp">// 获取员工 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";

    // 执行查询
}</code>
Nach dem Login kopieren

SQL Server 2005

Einführung in die benutzerdefinierte Demontagefunktion für die Array -Übertragung:

SQL -Funktion

<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
  );
GO</code>
Nach dem Login kopieren

Speicherprozedur

<code class="language-sql">CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List VARCHAR(MAX)
AS
BEGIN
  SET NOCOUNT ON;

  SELECT EmployeeID = Item FROM dbo.SplitInts(@List, ','); 
END
GO</code>
Nach dem Login kopieren
C# Code

bestehen das Array als eine Liste von Kommas.

Das obige ist der detaillierte Inhalt vonWie übergeben Sie ein Array an einen SQL Server gespeicherten Prozedur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage