【发布时间】:2014-11-08 23:45:25
【问题描述】:
SQL Server 版本:Microsoft SQL Server 2012 - 11.0.2218.0 (x64)
运行此查询时出现以下异常。 例外:“WHEN MATCHED”类型的操作不能在 MERGE 语句的“UPDATE”子句中出现多次。
我知道该异常不止一次出现在 Merge 语句中的 Update 语句中。 您能否建议我如何实现以下 SQL 查询逻辑?
基于一列,
如果匹配且列不为空,则仅更新一个不同的列。
当匹配且列为空时,更新大部分列。
不匹配时插入。
完整的SQL是
MERGE TargetTable AS targetT
USING SourceTable AS sourceT ON sourceT.Npi = targetT.Npi
WHEN MATCHED AND IsNull(targetT.SPI, '') <> '' THEN
UPDATE SET targetT.Taxonomy = sourceT.Taxonomy --Update Only One Column
WHEN MATCHED AND IsNull(targetT.SPI,'')= '' THEN --Update Rest of the Columns
UPDATE SET targetT.state_license_no = sourceT.state_license_no, targetT.NPI = sourceT.NPI, targetT.PrefixName = sourceT.PrefixName,targetT.last_name = sourceT.last_name,targetT.first_name = sourceT.first_name
,MiddleName = sourceT.MiddleName,targetT.SuffixName = sourceT.SuffixName, targetT.address_1 = sourceT.address_1,targetT.address_2 = sourceT.address_2,targetT.City = sourceT.City,targetT.State = sourceT.State
,zip = sourceT.zip,targetT.phone = sourceT.phone,targetT.Fax = sourceT.Fax,targetT.last_modified_date = sourceT.last_modified_date,targetT.Taxonomy = sourceT.Taxonomy
WHEN NOT MATCHED BY TARGET --Insert New Row
THEN
INSERT (state_license_no, NPI, prefixname, last_name, first_name, MiddleName, SuffixName, address_1, address_2, City, State, zip, phone, Fax, last_modified_date, Taxonomy, Data_source)
VALUES (sourceT.state_license_no, sourceT.NPI, sourceT.PrefixName, sourceT.last_name, sourceT.first_name, sourceT.MiddleName, sourceT.SuffixName,
sourceT.address_1, sourceT.address_2, sourceT.City, sourceT.State, sourceT.zip,
sourceT.phone, sourceT.Fax, sourceT.last_modified_date, sourceT.Taxonomy, sourceT.Data_source);
【问题讨论】:
标签: sql sql-server merge sql-server-2012 sql-update