Maison > développement back-end > C++ > Comment passer les tableaux dans les procédures stockées SQL Server?

Comment passer les tableaux dans les procédures stockées SQL Server?

Linda Hamilton
Libérer: 2025-01-31 08:46:13
original
403 Les gens l'ont consulté

How Can I Pass Arrays into SQL Server Stored Procedures?

Passez le tableau à la procédure de stockage SQL Server

Le tableau est transmis au processus de stockage SQL Server est très utile dans divers scénarios, tels que l'utilisation de la liste des employés comme table pour se connecter à d'autres tables. Cet article traite des différentes méthodes de passage du tableau à la procédure de stockage en fonction des différentes versions de SQL Server.

SQL Server 2016 (ou version supérieure)

Pour SQL Server 2016 et des versions supérieures, vous pouvez passer la liste de séparation ou JSON et utiliser

string_split () ou openjson () .

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

  SELECT value FROM STRING_SPLIT(@List, ',');
END
Copier après la connexion
-- 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
Copier après la connexion
SQL Server 2008 (ou version supérieure)

Dans SQL Server 2008 et des versions supérieures, vous pouvez créer un type de définition d'utilisateur (UDT) pour représenter le tableau.

-- 创建 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
Copier après la connexion
SQL Server 2005

Si vous utilisez SQL Server 2005, vous pouvez utiliser une fonction personnalisée pour diviser la liste.

-- 创建函数
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
  );
Copier après la connexion
-- 创建存储过程
CREATE PROCEDURE dbo.DoSomethingWithEmployees
  @List VARCHAR(MAX)
AS
BEGIN
  SET NOCOUNT ON;

  SELECT EmployeeID = Item FROM dbo.SplitInts(@List, ','); 
END
Copier après la connexion
Résumé:

La méthode d'utilisation des paramètres de valeur de table (TVP) simplifie le maintien de la solution pour l'utiliser, et est généralement plus élevé que les autres implémentations, y compris les divisions XML et String. Cela implique une étape similaire à la création d'un mode XML défini par l'utilisateur, mais dans l'expérience, il est plus facile de gérer, de maintenir et de lire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal