2017-01-30 76 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语句文档。