我有一张 BigTable 和一张 LittleTable。我想将一些记录的副本从 BigTable 移动到 LittleTable 中,然后(对于这些记录)将 BigTable.ExportedFlag 设置为 T(表示记录的副本已被移动到小表中)。
有没有办法在一个声明中做到这一点?
我知道我可以进行以下交易:
- 根据 where 子句从大表中移动记录
- 根据同样的 where 子句更新导出到 T 的大表设置。
我还研究了一个MERGE 语句,这似乎不太正确,因为我不想更改小表中的值,只需将记录移动到小表中。
我在更新语句之后查看了OUTPUT 子句,但找不到有用的示例。我不明白为什么 Pinal Dave 使用Inserted.ID, Inserted.TEXTVal, Deleted.ID, Deleted.TEXTVal
而不是Updated.TextVal
. 更新被认为是插入还是删除?
我发现这篇文章TSQL: UPDATE with INSERT INTO SELECT FROM说“AFAIK,你不能用一条 sql 语句更新两个不同的表。”
是否有一个干净的单一声明来做到这一点?我正在寻找一个正确的、可维护的 SQL 语句。我必须在一个事务中包装两个语句吗?