SP に 3 つのパラメーターがあるとします。ID('1,2,3')、価格('22,33.7,44')、カウント('4,5,1')。スプリット機能もあります。ここで、これらの値をデータベース テーブルに挿入したいと考えています。したがって、私のテーブルは次のようになります。
ID Price Count
1 22 4
2 33.7 5
3 44 1
SP に 3 つのパラメーターがあるとします。ID('1,2,3')、価格('22,33.7,44')、カウント('4,5,1')。スプリット機能もあります。ここで、これらの値をデータベース テーブルに挿入したいと考えています。したがって、私のテーブルは次のようになります。
ID Price Count
1 22 4
2 33.7 5
3 44 1
SQL 2008以降では、テーブル値パラメーターを使用できます。構造化テーブルをsprocに渡すことができるように、そのルートを試すことをお勧めします。そのMSDNリンクに完全な例があります。
私は一般的にCSV値/文字列分割よりもそのルートを好むでしょう。私はここでいくつかの異なるアプローチとパフォーマンスの比較をブログに書きました: テーブル値パラメーターvs XML vs CSV
create function dbo.SimpleSplit(@str varchar(max))
returns @table table (
val varchar(max),
rowid int
)
with schemabinding
as
begin
declare @pos int,
@newPos int,
@rowid int;
set @pos = 1;
set @newPos = charindex(',', @str, 1);
set @rowid = 1;
while (@newPos != 0)
begin
insert into @table
values (substring(@str, @pos, @newPos - @pos), @rowid);
set @rowid += 1;
set @pos = @newPos + 1;
set @newPos = charindex(',', @str, @pos);
if (@newPos = 0)
insert into @table
values (substring(@str, @pos, len(@str)), @rowid);
end
return;
end
GO
create procedure somesp (@id varchar(128), @price varchar(128), @count varchar(128))
as
select t.val as id, t2.val as price, t3.val as [count]
from dbo.SimpleSplit(@id) t
inner join dbo.SimpleSplit(@price) t2 on t.rowid = t2.rowid
inner join dbo.SimpleSplit(@count) t3 on t.rowid = t3.rowid
GO
exec somesp '1,2,3', '22,33.7,44', '4,5,1'