2017-01-30 13 views
0

注:SQLシートからデータをインポートしています。この後、私はテーブルにデータを挿入したいが、同じContractNo(契約番号)を見つけるとデータを更新し、別のContractNo(契約番号)を見つけると新しいレコードとして挿入するSQLでwhere句でマージクエリを更新する

しかし、クエリがwhereステートメントで動作していません。

string mergeSql = "merge into " + tableName + " as Target " + 
            "using Ro_Consumers_Temp as Source " + 
            "on " + 
            "Target.ContractNo=Source.ContractNo " + 
            "when not matched then " + 
            "insert values (Source.Ronumber,Source.ContractNo,Source.BusinessPartner,Source.ContractAccount,Source.IBC,Source.Portion,Source.MRU,Source.Installation,Source.MeterNo,Source.LegacyNumber,Source.ConsumerNo,Source.ConsumerName,Source.Address,Source.Tariff,Source.ROAgent,Source.IBCName,Source.CD,Source.Batch,Source.JasbNumber,Source.SheetNo, Source.ContactName,Source.ContactNumber,Source.FOName,Source.[Address&LandMark],Source.NatureOfBusiness)" + 
            "when matched then update set Batch = Source.Batch, JasbNumber = Source.JasbNumber Where Target.Batch=Source.Batch;"; 
+3

句を 'when'に追加することができます。' '一致していない場合やTarget.Batch = Source.Batch''のように、更新に' where'を追加するのではなく、 https://msdn.microsoft.com/en-us/library/bb510625.aspx – juharr

+1

これはSQLインジェクションを開く可能性が高いため、パラメータ化されたクエリをご利用ください。 – user2366842

+0

QUOTENAMEにtableNameをラップすることにより、SQLインジェクションのリスクを最小限に抑えることができます。 –

答えて

0

追加WHEN MATCHED句条件を使用してWHERE句を置き換えます

string mergeSql = "merge into " + tableName + " as Target " + 
            "using Ro_Consumers_Temp as Source " + 
            "on " + 
            "Target.ContractNo=Source.ContractNo " + 
            "when not matched then " + 
            "insert values (Source.Ronumber,Source.ContractNo,Source.BusinessPartner,Source.ContractAccount,Source.IBC,Source.Portion,Source.MRU,Source.Installation,Source.MeterNo,Source.LegacyNumber,Source.ConsumerNo,Source.ConsumerName,Source.Address,Source.Tariff,Source.ROAgent,Source.IBCName,Source.CD,Source.Batch,Source.JasbNumber,Source.SheetNo, Source.ContactName,Source.ContactNumber,Source.FOName,Source.[Address&LandMark],Source.NatureOfBusiness)" + 
            "when matched " + 
            "and Target.Batch=Source.Batch " + // <<< Move the clause here 
            "then update set Batch = Source.Batch, JasbNumber = Source.JasbNumber"; 

は、詳細はMERGEのステートメントのマニュアルを参照してください。