C# 插入时的SQL Server触发器

C# 插入时的SQL Server触发器,c#,sql,sql-server,triggers,C#,Sql,Sql Server,Triggers,当我尝试将一条新记录插入我创建的表中时,该表上的触发器不会创建 这是在我启动触发器之后。当我停用它,然后重复插入,它通过。我的扳机少了什么 我的触发器识别表中的所有新行,然后通过电子邮件将它们发送给收件人 这是我的扳机 USE [paldbCAT_TEST] GO /****** Object: Trigger [dbo].[LPO_ON_INSERT] Script Date: 10-11-2020 12:09:01 PM ******/ SET ANSI_NULLS ON GO SE

当我尝试将一条新记录插入我创建的表中时,该表上的触发器不会创建

这是在我启动触发器之后。当我停用它,然后重复插入,它通过。我的扳机少了什么

我的触发器识别表中的所有新行,然后通过电子邮件将它们发送给收件人

这是我的扳机

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;



您正在创建触发器,使其替换INSERT语句,只要触发器通知插入,它就应该在插入发生后运行

您可以在中进一步阅读触发器类型

更改触发器[dbo]。[LPO\U在插入时] 在[dbo].[tblOrdersDocP_po批准] 插入后为
嘿,我刚刚找到了一个解决方案@Evk,该语句而不是INSERT是有害的

这看起来不像触发器。它从不使用inserted/deleted,而且它错过了CREATE触发器,因此我们不知道它是否真的触发了HI查看修改后的条目您的触发器不是INSERT。顾名思义-它运行而不是insert,所以实际的insert不会发生。嘿,我刚刚找到了一个解决方案@Evk,语句而不是insert是有害的注意,你应该通过insert引用访问插入的行,而不是像你现在这样。这与我在回答中告诉你的差不多,很高兴你发现了问题。快乐编码!