在一个TSQL语句中插入和更新记录?

ber*_*436 4 t-sql

我有一个表BigTable和一个表LittleTable.我想将一些记录的副本从BigTable移动到LittleTable然后(对于这些记录)将BigTable.ExportedFlag设置为T(表示记录的副本已移动到小表).

有没有办法在一个声明中这样做?

我知道我可以做一个交易:

  1. 根据where子句移动大表中的记录
  2. 根据同一个where子句更新导出到T的大表设置.

我还查看了MERGE语句,这似乎不太正确,因为我不想在小表中更改值,只需将记录移动到小表中即可.

我在update语句之后查看了一个OUTPUT子句,但找不到有用的示例.我不明白为什么Pinal Dave正在使用Inserted.ID, Inserted.TEXTVal, Deleted.ID, Deleted.TEXTVal而不是Updated.TextVal.更新是否被视为插入或删除?

我发现这篇文章TSQL:UPDATE with INSERT INTO SELECT FROM说"AFAIK,你不能用一个sql语句更新两个不同的表."

这样做有一个干净的单一声明吗?我正在寻找一个正确的,可维护的SQL语句.我是否必须在一个事务中包装两个语句?

Mar*_*ith 7

OUTPUT只要LittleTable满足作为目标的要求,您就可以使用该子句OUTPUT ... INTO

UPDATE BigTable
SET ExportedFlag = 'T'
OUTPUT inserted.Col1, inserted.Col2 INTO LittleTable(Col1,Col2)
WHERE <some_criteria>
Run Code Online (Sandbox Code Playgroud)

如果你使用INSERTED或没有任何区别DELETED.它唯一不同的列是你要更新的deleted.ExportedFlag那个(具有之前的值,inserted.ExportedFlag将会是T)