1

我对 Management Studio 的行为感到困惑。我创建了一个简单的测试触发器(更新操作),它应该向消息选项卡显示消息(打印),但没有消息选项卡出现,我看不到任何输出。如果我执行任何其他查询没关系,我可以看到结果选项卡和消息选项卡。触发器本身可以工作(数据正在更改)。

这是我的代码:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[Trigger1]
ON [dbo].[TestTable]
FOR UPDATE
AS
    PRINT ('YAHOOOOO!!!') /* can't see this message */
    UPDATE TestTable
    SET    TestData = 'testitem'
    WHERE  (TestId = 2)
4

1 回答 1

2

2个问题

  1. 您的触发器将导致“递归过多”错误,因为它尝试更新表(在触发器内),该表再次调用触发器,然后尝试更新表,然后调用触发器......无限期(理论上)。实际上,SQL Server 在检测到错误后将其杀死。

  2. “编辑前 200 行”是一项特殊功能,它有自己的消息窗口,因此您看不到任何输出。您需要在新的查询窗口中运行您的代码。

在新的查询窗口中,重新定义触发器,如下所示:

ALTER TRIGGER [dbo].[Trigger1]
ON [dbo].[TestTable]
FOR UPDATE
AS
    PRINT 'YAHOOOOO!!!'; /* can't see this message */
GO

然后,自行运行此 UPDATE 语句。

UPDATE TestTable
SET    TestData = 'testitem'
WHERE  TestId = 2;

注意:去掉多余的括号。

于 2012-12-16T22:11:46.673 回答