当没有数据表行被更改时,触发 NOCOUNT 输出 1 或更多行受到影响

Trigger with NOCOUNT outputs 1 or more row(s) affected when no datatable rows were changed

我正在使用 SQL Server 2012。我在一个视图上有触发器,目的是允许我的用户像其他 table 一样对其执行 DML 操作。这些触发器有 SET NOCOUNT ON 并且有许多 IF...RAISERROR(...) RETURN 语句来捕获逻辑错误。我注意到,即使在不影响任何基础 tables 的情况下返回触发器,SSMS 也会输出 "n or more row(s) affected",其中 n 是视图中受影响的行数。因此,我测试了以下简单触发器,结果相同:

CREATE TRIGGER dbo.triggerViewTest 
ON dbo.viewTest
INSTEAD OF INSERT AS
BEGIN
    SET NOCOUNT ON
    IF 1 != 0
    BEGIN
        RAISERROR('No rows should be affected!', 16, 1)
        RETURN
    END
END

INSERT INTO dbo.viewTest (columnA) VALUES (1)

并且 SSMS 打印 1 row(s) affected

如何抑制此输出?

以下将阻止此消息返回到控制台。 它与会话设置有关,与触发代码无关

set nocount on
insert into viewTest select...
set nocount off

根据@Eralper 所说的在这里回答我自己的问题;此消息来自会话设置,而不是来自触发器。因此,阻止该消息的唯一方法是 THROW 一个错误,它会取消该会话(RAISERROR() 不会取消该会话)。以下触发器不显示n row(s) affected:

CREATE TRIGGER dbo.triggerViewTest 
ON dbo.viewTest
INSTEAD OF INSERT AS
BEGIN
    SET NOCOUNT ON
    IF 1 != 0
    BEGIN
        ;THROW 50000, 'No rows should be affected!', 1
    END
END

INSERT INTO dbo.viewTest (columnA) VALUES (1)