在下面的合并语句中,NewTable和OldTable有相同的3列:EmployeeId
和DivisionId
是nvarchar(50)
列,Unpublished
是bit
列。
我需要将所有未发布= 1的记录从OldTable移到NewTable中。因此,插入(到NewTable),然后删除(从OldTable)语句。我必须使用合并(作为迁移规则的一部分)。
INSERT部件工作正常,但DELETE部分给出了一个错误:“MERGE语句的'WHEN not‘子句中不允许'DELETE’类型的操作”。
在这种情况下,应该如何编写删除子句?
MERGE NewTable as target
USING OldTable as source
on target.EmployeeId = source.EmployeeId
WHEN NOT MATCHED AND source.Unpublished = 1
THEN INSERT (EmployeeId,DivisionId,Unpublished)
VALUES (source.EmployeeId, DivisionId, source.Unpublished)
WHEN NOT MATCHED AND source.Unpublished = 1
THEN DELETE;
发布于 2022-05-02 09:36:57
让我们首先使用一些可能说服现有现状改变的格式:
评论中的人都是退伍军人。MERGE
语句在语法上很有诱惑力,但没有很好地实现,而且充满了危险。避开它。
现在我们已经解决了这个问题,接下来的事情就是了解您到底想要删除什么。我在你的问题中注意到了这一点:
,然后删除(从OldTable)语句
合并语句可以在单个表上执行所有(插入、更新、删除),在您的示例中是merge
之后的表名为NewTable
。但是,不能从同一合并中的另一个表(OldTable)中删除。您可以做的是使用output
子句来跟踪NewTable中哪些行是inserted
,这样就可以在OldTable上运行delete。
https://stackoverflow.com/questions/72087774
复制