首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Server合并语句-将数据从一个表移动到另一个表

Server合并语句-将数据从一个表移动到另一个表
EN

Stack Overflow用户
提问于 2022-05-02 13:56:32
回答 1查看 140关注 0票数 -1

在下面的合并语句中,NewTable和OldTable有相同的3列:EmployeeIdDivisionIdnvarchar(50)列,Unpublishedbit列。

我需要所有未发布= 1的记录从OldTable移到NewTable中。因此,插入(到NewTable),然后删除(从OldTable)语句。我必须使用合并(作为迁移规则的一部分)。

INSERT部件工作正常,但DELETE部分给出了一个错误:“MERGE语句的'WHEN not‘子句中不允许'DELETE’类型的操作”。

在这种情况下,应该如何编写删除子句?

代码语言:javascript
代码运行次数:0
运行
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2022-05-02 17:36:57

让我们首先使用一些可能说服现有现状改变的格式:

评论中的人都是退伍军人。MERGE语句在语法上很有诱惑力,但没有很好地实现,而且充满了危险。避开它。

现在我们已经解决了这个问题,接下来的事情就是了解您到底想要删除什么。我在你的问题中注意到了这一点:

,然后删除(从OldTable)语句

合并语句可以在单个表上执行所有(插入、更新、删除),在您的示例中是merge之后的表名为NewTable。但是,不能从同一合并中的另一个表(OldTable)中删除。您可以做的是使用output子句来跟踪NewTable中哪些行是inserted,这样就可以在OldTable上运行delete。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72087774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档