0
を挿入します。は、ストアドプロシージャに配列を渡し、私はテーブルにこれらの値を挿入する必要があり、これらの値のSQL Server
ID Col1 col2 date
1 10 5 getdate()
2 20 5 getdate()
3 30 5 getdate()
第1列は、文字列'10に来る20,30' と私は機能を使用していますデータ
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
);
GO
ストアドプロシージャ
SELECT @lenList = Count(Item) FROM dbo.SplitInts(@Col1List, ',');
IF @lenList > 0
WHILE @i <= @lenList
BEGIN
SELECT @col1 = CONVERT(INT,Item) FROM dbo.SplitInts(@Col1List, ',');
INSERT
INTO [dbo].[Table1]
(
[Col1],
[Col2],
[CreatedOn],
)
VALUES
(
@col1,
@col2,
getdate()
)
SET @i = @i+1
END
で
を解析し、取得するためにsplintintしかし、問題は、私が見る唯一の最後のrとしますowは毎回、すなわち30,5ここに挿入されます。私はここで間違って何をしていますか?どんな助けもありがとうございます。
痛いです。あなたは素敵なセットベースのスプリッタを持っていますが、あなたはまだループしています。その種の目的を破る。もちろん、最善のアプローチは、区切りリストの代わりにテーブル値のパラメータを渡すことです。次に、テーブルのように簡単に使用できます。それらについては、https://msdn.microsoft.com/en-us/library/bb675163(v=vs.110).aspxと、ここでどのように使用できるかについて読むことができます。 https://msdn.microsoft.com/en-us/library/bb510489.aspx –