前提
- DB : SQL Server
- 言語 : C#
- FW : .NetFramewofk4.8
処理の目的
複数データ(100行6カラム)をexcelから読み取り
DB内でカラムAが重複してるときカラムBを更新する
(実際はwithでサブクエリを分解したいほど複雑)
概要
2テーブル登場しまして
仮にTA,TB...とおきます。
取得物含め構造を模したダミーですが、
大体以下の形でクエリを組んでいて、実際は3,4テーブル絡んでます。
SQL
1INSERT INTO #TARGET 2SELECT 3 TB.NAME 4 ,TEST.NAME 5FROM TB inner join ( 6 SELECT 7 TA.ID AS ID 8 ,@外部Name AS NAME 9 FROM 10 TA 11 WHERE 12 TA.ID = @外部ID 13) AS TEST 14ON TB.ID = TEST.ID 15WHERE 16 TB.NAME = TEST.NAME
試したこと 考えていること
前提で記載した通り、バインド変数には複数の値を入れることになりますので
ぱっと思いついたのはこのでか目なINSERTを100行分書き、バインド変数を連番にして割り当てることです。
ただそうするとログも見づらいですし、何よりグルグルSQLチックになりそうで重いと考えます。
帰宅中に思いついたのが、外部データも一時テーブル化し参照したほうが
まだましかなと思うのですが、その他の手法はございますでしょうか?
C# で SQL Server のテーブルに INSERT する場合は SqlBulkCopy クラスを使うと高速に処理できます。
https://learn.microsoft.com/ja-jp/dotnet/api/system.data.sqlclient.sqlbulkcopy?view=netframework-4.8.1
回答1件
あなたの回答
tips
プレビュー