SQL 插入 - 删除表

Posted

技术标签:

【中文标题】SQL 插入 - 删除表【英文标题】:SQL inserted - deleted Tables 【发布时间】:2011-06-21 22:16:37 【问题描述】:

我想更新一个表并从 SQL Server 的默认“插入”表中获取更新的记录。

以下查询的更新部分成功,但为什么查询的剩余“SELECT * FROM inserted”部分会引发错误为“Invalid object name 'inserted'。”?

use AdventureWorks
go

UPDATE TOP(50) Person.Address
SET  City= 'PARIS'

SELECT * FROM inserted

【问题讨论】:

作为独立项,inserteddeleted 只能在触发器中使用。您似乎想要受update 影响的记录列表?在这种情况下,您需要按照 SqlACID 的建议使用 output 子句。 【参考方案1】:

你会想要这样做:

 UPDATE TOP(50) Person.Address set
 city='Paris' output inserted.*

除非您想要旧值,在这种情况下使用已删除。*

【讨论】:

output inserted.*等从受影响的行中获取所有列。 它引发错误:“Msg 334, Level 16, State 1, Line 1 如果语句包含没有 INTO 的 OUTPUT 子句,则 DML 语句的目标表 'Person.Address' 不能有任何启用的触发器子句。” @Ahmet Altun - 您必须创建一个捕获输出的表变量,然后在更新语句之后查询该表。 blogs.msdn.com/b/sqlprogrammability/archive/2008/07/11/…

以上是关于SQL 插入 - 删除表的主要内容,如果未能解决你的问题,请参考以下文章

具有只读访问权限的 Sql 虚拟表:插入、删除、更新?

如何使用带有插入/删除的 Core Data(或 SQL)维护有序表?

在SQL中怎么删除两个表中相同的数据

更新同一表中的值的 PL/SQL 插入和删除触发器

数据库:表的插入,更新表中的数据记录,删除表中的数据记录

SQL Server - 使用表触发器记录表插入,更新,删除行数