在SQL Server 2012触发器中设置NOCOUNT ON使用正确位置

时间:2015-05-28 10:39:00

标签: sql-server tsql triggers

我的问题涉及SET NOCOUNT ON在触发器中的正确定位 - 在谷歌搜索相对于' BEGIN'似乎有争议。 我们有多个类似于下面的触发器,其中一个仍然将结果返回给应用程序。 SET NOCOUNT ON'之后BEGIN的正确位置是什么?

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [scheme].[T_AD_IU_STOCKM] ON [scheme].[stockm]
AFTER INSERT, UPDATE
AS 
SET ANSI_NULLS ON 
SET ANSI_WARNINGS ON
SET NOCOUNT ON
IF (update([alpha]) or update([catalogue_number]) or update([current_cost])       or update([description]) 
or update([expected_cost]) or update([long_description]) or update([physical_qty]) or update([price])
 or update([product]) or update([standard_cost]))

BEGIN
//Should 'SET NOCOUNT ON' be here?
    insert into Bespoke_JLA.dbo.MOD_STOCKM
    SELECT 
        distinct i.product, i.warehouse, getdate()
    FROM 
        inserted i
    WHERE 
        i.warehouse in ('PH', 'MH');
END

GO

1 个答案:

答案 0 :(得分:0)

在触发器的开头使用SET NOCOUNT语句,以防止返回任何结果集。

有关详细信息,请参阅以下MSDN链接中的触发限制阻止 Trigger Limitations