【发布时间】:2014-09-19 17:16:31
【问题描述】:
我正在尝试将值从一个表合并到另一个表。其中一个值是条件值,但看起来我没有正确理解语法。最初,我使用的是 IF-THEN-ELSE 语句,但被建议改用 CASE 语句。
这是失败的语法要点:
CREATE PROCEDURE EmployeeMerge
AS
BEGIN
SET NOCOUNT ON;
MERGE INTO Employee AS t1
USING
(SELECT
EmployeeName,
Zip,
UpdateDate
FROM table2) AS t2
ON (t1.EmployeeID = t2.EmployeeID)
WHEN MATCHED AND t2.UpdatedDate > t1.UpdatedDate THEN
UPDATE
SET
t1.EmployeeName = s.EmployeeName,
t1.Zip =
(CASE
WHEN t2.ZipExt IS NULL OR t2.ZipExt = '' THEN t2.Zip
ELSE (t2.Zip + '-' + t2.ZipExt)
END),
t1.UpdatedDate = t2.UpdateDate
WHEN NOT MATCHED THEN
INSERT (EmployeeName,
Zip,
ModDate)
VALUES
(t2.Name,
(CASE
WHEN t2.ZipExt IS NULL OR t2.ZipExt = '' THEN t2.Zip
ELSE (t2.Zip + '-' + t2.Zip_Ext)
END),
t2.UpdatedDate)
OUTPUT
deleted.*,
$action,
inserted.*
END; **-- A MERGE statement must be terminated by a semi-colon (;)**
GO
如果我不实现条件,即简单地设置 t1.Zip = t2.Zip,则此 MERGE 语句可以正常工作,但当然,这是避免 t2.ZipExt 字段。
【问题讨论】:
-
你必须使用大小写开关see this post
-
去掉 if 并使用 case。如果您想了解更多细节,请发布完整的 SQL :)
-
@Max,我已经更新了我的SQL语句,请参考,谢谢!
-
@SpectralGhost,我已经更新了我的SQL语句,请参考,谢谢!
-
好的,我们解决了原来的问题。您现在遇到什么问题?
标签: sql-server tsql merge