配列は TSQL に存在しないため、配列をストアド プロシージャに渡すことはできません。いくつかのオプションがあります。そのうちの 2 つを紹介します。
オプション 1 - 手早く汚い(お勧めしません)
値を文字列として渡し、それを動的 SQL ステートメントに追加します。
CREATE PROCEDURE MyProc
@Values varchar(1000)
AS
DECLARE @SQL VARCHAR(2000)
SET @SQL = 'SELECT blahblah WHERE SomeField IN (' + @Values + ')'
-- Execute the statement and return the result
END
明らかな SQL インジェクションの脆弱性は別として、このアプローチは大規模なセットでは機能せず、パフォーマンスもあまり良くありません。また、値にコンマが含まれていると機能しません。簡単なテストには役立つかもしれませんが、私は本当にお勧めしません。
オプション 2 - より柔軟なソリューション
ストアド プロシージャで参照する一時テーブルにすべての値を格納します。
CREATE TABLE #MyTempTable
-- Fields...
INSERT INTO #MyTempTable
-- Insert the values
CREATE PROCEDURE MyProc
@Values varchar(1000)
AS
SELECT
SomeFields
FROM
MyTable
JOIN
#MyTempTable ON
-- Add join clause
END
このソリューションは、拡張性に優れている可能性があります。
他の人が示唆しているように、インメモリテーブル(私は個人的には避けていますが、あまり運がなかったので、常に一時テーブルよりもパフォーマンスが悪い)またはテーブルパラメーターを使用することもできますが、事前にその型を宣言する必要があります.