Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server Management Studio-从触发器打印未显示_Sql Server_Tsql_Printing_Triggers - Fatal编程技术网

Sql server SQL Server Management Studio-从触发器打印未显示

Sql server SQL Server Management Studio-从触发器打印未显示,sql-server,tsql,printing,triggers,Sql Server,Tsql,Printing,Triggers,我对管理工作室的行为感到困惑。我已经为测试创建了一个简单的触发器(更新操作),它应该向Messages选项卡显示message(打印),但是没有Messages选项卡出现,我看不到任何输出。若我执行任何其他查询,它是确定的,我可以看到结果选项卡和消息选项卡。触发器本身工作(数据正在更改) 这是我的密码: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[Trigger1] ON [dbo].[TestTa

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

这是我的密码:

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)
2个问题

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

  • “编辑前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;
    

    注意:去掉多余的括号。

    您确定您实际执行的是触发触发器的
    UPDATE
    语句吗?问题中显示的是触发器定义的一部分,而不是单独的语句。这看起来是个错误。在
    PRINT
    语句之后需要一个
    GO
    ,这是一个单独的批。嗨,马丁!谢谢你的回复。为了测试它,我只需点击TestTable->Edit Top 200行,然后手动更改第10行f.e.中的值,并立即将第2行的TestData列值更改为'Anna',所以我认为触发器是有效的,对不起,我是个新手,如果您在SSMS的图形工具中执行此操作,它可能不会在任何地方显示这些非错误消息。尝试从新查询窗口运行
    UPDATE
    语句,而不是使用UI编辑器。这取决于它将退出(在32次调用后)还是不调用触发器的设置。无论哪种方式,触发器中的代码都没有任何意义。不,没有,这是我要求OP重新定义触发器噢,对不起,伙计们,我的错,现在我明白了打印和更新语句是不同的部分,更新实际上触发了触发器