可変数のパラメータを渡すのではなく、コンマで区切られた名前のリストを1つ送信し、格納されたproc内で分割関数を使用して名前の値を取り出して挿入します。その後、
CREATE PROC InsertData_To_TempTable
@NameList VARCHAR(MAX)
AS
BEGIN
INSERT INTO #MyTempTable(Name)
SELECT Item
FROM dbo.SplitString(@NameList)
END
そして
EXEC InsertData_To_TempTable 'A,B,C'
EXEC InsertData_To_TempTable 'A,B,C,D,E'
を呼び出して何の作り付けのスプリット機能はので、ここではありませんが、より良い性能を持つ他のスプリットfucntion(whileループを用いない)があり、1 user defined function.
CREATE FUNCTION SplitString
(
@Input NVARCHAR(MAX),
@Character CHAR(1)
)
RETURNS @Output TABLE (
Item NVARCHAR(1000)
)
AS
BEGIN
DECLARE @StartIndex INT, @EndIndex INT
SET @StartIndex = 1
IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
BEGIN
SET @Input = @Input + @Character
END
WHILE CHARINDEX(@Character, @Input) > 0
BEGIN
SET @EndIndex = CHARINDEX(@Character, @Input)
INSERT INTO @Output(Item)
SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)
SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
END
RETURN
END
GO
ですあなたはそれを検索することができます。 SQL Server 2016で分割機能が導入されました。 ここでは、パフォーマンス分析の優れたソースはvarious split functionsです。スプリット/解析機能なし
のいずれかを必要に応じて、これはカンマ区切り自分の価値観を送信したり、*ユーザーを追加することを検討し、あなたがスプリット/解析機能付き
UDFを
を好む何もすることができますあなたのprocのパラメータとして定義されたテーブル型* – Stephen
ストアドプロシージャではなく 'insert'を使うのはどうですか? –
詳細な解答を見る@GordonLinoff - ユーザーが入力されます[こちら](http://stackoverflow.com/questions/11102358/how-to-pass-an-array-into-a-sql-server-stored-procedure) – MtwStark