在update语句中使用output子句时出现奇怪的错误?

时间:2013-04-11 00:11:07

标签: sql sql-server sql-server-2008 tsql sql-update

首先,根据我的经验,很多人都不熟悉输出。如果是这样,此链接非常方便:Hidden Features of SQL Server

我有以下更新声明:

UPDATE  lease_deal.lease_budget
SET     change_type = NULL 
OUTPUT  inserted.*
WHERE   ISNULL(change_type, '') = ''

虽然我认为这会为我返回更新的记录,但我收到以下错误:

  

消息334,级别16,状态1,行9目标表   DML语句的'lease_deal.lease_budget'不能启用任何   如果语句包含没有INTO的OUTPUT子句,则触发   子句。

我知道我可以使用输出语句成功创建临时表并将更新的记录重定向到那里,但为什么我不能将它返回给IDE?我确定(确定)我以前能够做到这一点,但似乎无法在任何地方找到合适的例子来帮助我理解我做错了什么。当您在要更新的列上有触发器时,这是不可能的吗?

1 个答案:

答案 0 :(得分:4)

这个

http://msdn.microsoft.com/en-au/library/ms177564.aspx

说这个

如果指定了OUTPUT子句而未指定INTO关键字,则DML操作的目标不能为给定的DML操作定义任何已启用的触发器。例如,如果在UPDATE语句中定义了OUTPUT子句,则目标表不能具有任何已启用的UPDATE触发器。