【问题标题】:After Insert Trigger not Working插入触发器后不起作用
【发布时间】:2013-10-15 20:54:32
【问题描述】:

我正在尝试运行插入后触发器,但它不起作用,有什么方法可以查看它的日志吗?

这是我的代码

ALTER TRIGGER [dbo].[SUBSID_INSERT] on [dbo].[STUDENT_MASTER] AFTER INSERT AS
BEGIN 
SET NOCOUNT ON
DECLARE @numrows int, @hostname char(30), @sysuser char(30);

SELECT @numrows = @@rowcount;
IF @numrows = 0 RETURN;

SELECT @hostname = substring(hostname, 1, 30)
FROM master.dbo.sysprocesses
WHERE spid = @@spid;

SELECT @sysuser = substring(system_user, 1, 30);

INSERT INTO insert statement,  


FROM STUDENT_MASTER JOIN INSERTED I ON STUDENT_MASTER.ID_NUM = I.ID_NUM
JOIN NAME_MASTER ON NAME_MASTER.ID_NUM = STUDENT_MASTER.ID_NUM


WHERE 
STUDENT_MASTER.id_num not in ( select DISTINCT id_num from subsid_master where subsid_cde LIKE '0%')

END

GO

【问题讨论】:

  • 不起作用 - 怎么样!?!?!它(a)什么都不做吗? (b) 抛出错误? (c) 做错了什么?
  • 没什么,就像参数返回 0 行但如果我运行脚本它会执行插入。
  • 什么是“INSERT INTO 插入语句”?那里的触发器是否符合这个...

标签: sql-server triggers insertafter


【解决方案1】:

您在声明变量后检查@@ROWCOUNT。这将始终显示最后一条语句的结果(在本例中为 0),所以停止这样做。而是使用:

SELECT @numrows = COUNT(*) FROM inserted;

我看到了许多其他潜在的改进,但这正是它目前似乎“不起作用”的原因。

【讨论】:

  • +1:@AaronBertrand,你的答案显然是正确的,但我想知道这个检查是否有必要?如果inserted 表为空,AFTER INSERT 触发器会触发吗?
猜你喜欢
  • 2013-02-08
  • 1970-01-01
  • 2020-07-04
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多