Heim > Backend-Entwicklung > C++ > Wie kann ich Arrays in SQL Server gespeicherte Prozeduren übergeben?

Wie kann ich Arrays in SQL Server gespeicherte Prozeduren übergeben?

Linda Hamilton
Freigeben: 2025-01-31 08:46:13
Original
377 Leute haben es durchsucht

How Can I Pass Arrays into SQL Server Stored Procedures?

Übergeben Sie das Array an die SQL Server -Speicherverfahren

Das Array wird an den SQL -Serverspeicherprozess übergeben ist in verschiedenen Szenarien sehr nützlich, z. B. die Verwendung der Mitarbeiterliste als Tabelle zur Verbindung zu anderen Tabellen. In diesem Artikel werden die verschiedenen Methoden zur Übergabe des Array an das Speichervorgang gemäß verschiedenen Versionen von SQL Server erörtert.

SQL Server 2016 (oder höhere Version)

Für SQL Server 2016 und höhere Versionen können Sie die Trennungsliste oder JSON übergeben und string_split () oder openjson () verwenden.

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

  SELECT value FROM STRING_SPLIT(@List, ',');
END
Nach dem Login kopieren
-- 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
Nach dem Login kopieren

SQL Server 2008 (oder höhere Version)

In SQL Server 2008 und höheren Versionen können Sie einen Benutzerdefinitionstyp (UDT) erstellen, um das Array darzustellen.

-- 创建 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
Nach dem Login kopieren

SQL Server 2005

Wenn Sie SQL Server 2005 verwenden, können Sie eine benutzerdefinierte Funktion verwenden, um die Liste zu teilen.

-- 创建函数
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
  );
Nach dem Login kopieren
-- 创建存储过程
CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List VARCHAR(MAX)
AS
BEGIN
  SET NOCOUNT ON;

  SELECT EmployeeID = Item FROM dbo.SplitInts(@List, ','); 
END
Nach dem Login kopieren

Zusammenfassung:

Die Methode zur Verwendung von Tabellenwertparametern (TVP) vereinfacht die Wartung der Verwendung der Lösung und ist normalerweise höher als andere Implementierungen, einschließlich XML- und String -Abteilungen. Dies beinhaltet einen Schritt wie das Erstellen eines benutzerdefinierten XML -Modus, aber in Erfahrung ist es einfacher, zu verwalten, zu warten und zu lesen.

Das obige ist der detaillierte Inhalt vonWie kann ich Arrays in SQL Server gespeicherte Prozeduren übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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