SQL Server 2016(または高バージョン)
または
<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>SQL Server 2008以上のバージョンでは、ユーザー定義タイプ(UDT)を作成して配列を表すことができます。
<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 2005を使用している場合、カスタム関数を使用してリストを分割できます。
<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>
概要:
<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>テーブル値パラメーター(TVP)を使用する方法は、ソリューションのメンテナンスを使用して使用し、通常はXMLや文字列部門を含む他の実装よりも高くなります。これには、ユーザーが定義されたXMLモードの作成と同様のステップが含まれますが、経験では、管理、保守、読み取りが簡単です。
以上が配列をSQL Serverストアドプロシージャに渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。