【发布时间】:2020-11-10 08:40:33
【问题描述】:
当我尝试向表中插入一条新记录时,我创建的触发器并未创建。
这是在我激活触发器之后。当我停用它然后重复插入时,它会通过。我的触发器中缺少什么?
我的触发器识别表中的所有新行,然后通过电子邮件将它们发送给收件人。
这是我的触发器
USE [paldbCAT_TEST]
GO
/****** Object: Trigger [dbo].[LPO_ON_INSERT] Script Date: 10-11-2020 12:09:01 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[LPO_ON_INSERT]
ON [dbo].[tblOrdersDocP_POApprovals]
INSTEAD OF INSERT AS
Declare
@HTMLbody nvarchar (max),
@strOrdPDocID varchar(100),
@strSelectedApproverUserName varchar(50),
@SQL nvarchar(max)
SET @SQL =''
Set @HTMLbody = '<html><head><title> System Tables</title></head><body>'
Set @HTMLbody = @HTMLbody + '<center> <h1 style="font-family: arial, sans-serif">Purchase Requisition(s) awaiting approvals.</h1></center>'
Set @HTMLbody = @HTMLbody + '<center><table style="font-family: arial, sans-serif;border-collapse: collapse;width: 100%;" ><TH style="background-color:black; color:white;border: 1px solid #dddddd;text-align: left;padding: 8px;">Document Number</TH><TH style="background-color:black; color:white;border: 1px solid #dddddd;text-align: left;padding: 8px;">Document Approver</TH>'
declare SystemTable cursor
for
select strOrdPDocID,strSelectedApproverUserName from tblOrdersDocP_POApprovals
open SystemTable
Fetch next from SystemTable into @strOrdPDocID,@strSelectedApproverUserName
While (@@FETCH_STATUS<> -1)
Begin
Set @SQL = @SQL + '<TR><TD style=" border: 1px solid #dddddd;text-align: left;padding: 8px;">' +@strOrdPDocID + '</TD><TD style=" border: 1px solid #dddddd;text-align: left;padding: 8px;">' + @strSelectedApproverUserName + '</TD></TR>'
Fetch next from SystemTable into @strOrdPDocID,@strSelectedApproverUserName
End
Close SystemTable
DEALLOCATE SystemTable
Set @HTMLbody = @HTMLbody + @SQL + '</table></center></body></html>'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'CatNotificationsMain',
@recipients = 'test@gmail.com',
@subject = 'Database Record Deleted',
@body_format='HTML',
@body = @HTMLbody,
@attach_query_result_as_file = 0;
【问题讨论】:
-
这看起来不像是触发器。它从不使用插入/删除,它错过了CREATE TRIGGER,所以我们不知道它是否真的触发
-
您好,看看修改内容
-
您的触发器是“INSTEAD OF INSERT”。顾名思义 - 它运行 而不是 插入,因此不会发生实际插入。
-
嘿,我刚刚找到了一个解决方案@Evk,“INSTEAD OF INSERT”语句是有害的
-
请注意,您应该访问通过“INSERTED”引用插入的行,而不是像现在这样。
标签: c# sql sql-server triggers