Maison >développement back-end >C++ >Comment passer les tableaux dans les procédures stockées SQL Server?
SQL Server 2016 (ou version supérieure)
string_split () ou openjson () .
<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 (ou version supérieure)
<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
<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>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!