以下に示すようにループ挿入を行っています(方法A)。ループごとにデータベースを呼び出すのは良い考えではないようです。別の方法として、SProcでコンマ区切りの文字列をループして挿入を実行し、DBへのエントリを1つだけにすることもできます。パフォーマンスの面で大幅な改善はありますか?:
方法A:
foreach (DataRow row in dt.Rows)
{
userBll = new UserBLL();
UserId = (Guid)row["UserId"];
// Call userBll method to insert into SQL Server with UserId as one of the parameter.
}
方法B:
string UserIds = "Tom, Jerry, 007"; // Assuming we already concatenate the strings. So no loops this time here.
userBll = new UserBLL();
// Call userBll method to insert into SQL Server with 'UserIds' as parameter.
方法BSProc/SProcでループ挿入を実行します。
if right(rtrim(@UserIds ), 1) <> ','
SELECT @string = @UserIds + ','
SELECT @pos = patindex('%,%' , @UserIds )
while @pos <> 0
begin
SELECT @piece = left(@v, (@pos-1))
-- Perform the insert here
SELECT @UserIds = stuff(@string, 1, @pos, '')
SELECT @pos = patindex('%,%' , @UserIds )
end