我有以下触发器:
USE SomeDB
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [Staging].[RunPivot15]
ON [Staging].[UriData]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
EXEC [Staging].[PivotData]
END
它不会发射。该表每五分钟接收约30行。从那时起,我陷入困境。我一直在读,因为要插入多行,所以我必须运行一个游标。我尝试过光标,但也无法使它起作用。
您能告诉我们最好的方法是什么吗?
TIA
答案 0 :(得分:2)
触发器极不可能不运行。在触发器中,最后在存储过程中,在过程调用周围添加几个打印语句。当您在Management Studio中运行更新语句以触发触发器时,这将帮助您跟踪执行。
USE SomeDB
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [Staging].[RunPivot15]
ON [Staging].[UriData]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
PRINT 'Before call.'
EXEC [Staging].[PivotData]
PRINT 'After call.'
END
然后在Management Studio中运行一条更新语句,然后检查“消息”选项卡以查看是否打印了您的消息。
update Staging.RunPivot15 set SomeColumn = SomeColumn where SomeColumn = SomeValue
否,您不需要游标。当执行触发器时,如果影响了多行,则在插入/删除的伪表中也将有多行。在您的情况下,您也不阅读要更新的行,因此只需运行该过程即可。如果您需要知道确切地修改了哪些行,请编写代码以基于集合的方式处理它们(一次所有行)。在数据库中,游标循环实际上绝不是好主意。