【发布时间】:2012-09-13 13:35:59
【问题描述】:
我有一张 BigTable 和一张 LittleTable。我想将一些记录的副本从 BigTable 移动到 LittleTable,然后(对于这些记录)将 BigTable.ExportedFlag 设置为 T(表示记录的副本已移动到小表)。
有没有办法在一个语句中做到这一点?
我知道我可以进行以下交易:
- 根据 where 子句从大表中移动记录
- 根据同样的 where 子句更新导出到 T 的大表设置。
我还查看了MERGE statement,这似乎不太正确,因为我不想更改小表中的值,只需将记录移动到小表中。
我在更新语句之后查看了OUTPUT clause,但找不到有用的示例。我不明白为什么 Pinal Dave 使用Inserted.ID, Inserted.TEXTVal, Deleted.ID, Deleted.TEXTVal 而不是Updated.TextVal。更新被认为是插入还是删除?
我发现这篇帖子 TSQL: UPDATE with INSERT INTO SELECT FROM 说“AFAIK,你不能用一条 sql 语句更新两个不同的表。”
是否有一个干净的单一声明来做到这一点?我正在寻找一个正确的、可维护的 SQL 语句。我必须在一个事务中包装两个语句吗?
【问题讨论】:
-
“更新被认为是插入还是删除” -
UPDATE可以建模为DELETE和INSERT- 事实上,在内部,SQL Server 有时 i> 执行这样的转换 - 因此任何处理更新的结果(例如OUTPUT、MERGE或UPDATE触发器)都对其进行建模。
标签: tsql