簡體   English   中英

插入時觸發 SQL Server

[英]SQL Server trigger on insert

當我嘗試向表中插入新記錄時,我創建的觸發器沒有創建。

這是在我激活觸發器之后。 當我停用它然后重復插入時,它會通過。 我的觸發器中缺少什么?

我的觸發器識別表中的所有新行,然后通過電子郵件將它們發送給收件人。

這是我的觸發器

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 語句,只要您的觸發器確實通知插入,它就應該在插入發生后運行。

您可以進一步閱讀MS doc 中的觸發器類型

ALTER trigger [dbo].[LPO_ON_INSERT] 
ON [dbo].[tblOrdersDocP_POApprovals]
AFTER INSERT AS

嘿,我剛剛找到了一個解決方案@Evk,聲明“INSTEAD OF INSERT”是不利的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM