gpt4 book ai didi

sql - SPROC 完成执行后如何触发触发器?

转载 作者:行者123 更新时间:2023-12-03 07:27:03 24 4
gpt4 key购买 nike

我写了一个触发器,它可以连续发送一次电子邮件 插入 被执行。

ALTER TRIGGER TR_SendMailOnDataRequest
ON DataRequest
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;

DECLARE
@DR_Id INT,
@DR_FullName VARCHAR(200),
@DR_Email VARCHAR(200),
@DR_Phone VARCHAR(20),
@UT_Name VARCHAR(50),
@DR_UserTypeOther VARCHAR(50) = NULL,
@D_Name VARCHAR(200),
@DR_RequestDate DATETIME,
@UF_LinkedFiles VARCHAR(MAX),
@DRN_Names VARCHAR(200),
@DR_Description VARCHAR(1200),
@DR_CreatedOn DATETIME,
@analystMailList VARCHAR(MAX),
@tableHtml NVARCHAR(MAX),
@downloadLink VARCHAR(MAX) = N'NONE'

SELECT @DR_Id = MAX(DR_Id) FROM dbo.DataRequest

SELECT
@DR_FullName = DR_FullName,
@DR_Email = DR_Email,
@DR_Phone = DR_Phone,
@UT_Name = UT_Name,
@DR_UserTypeOther = DR_UserTypeOther,
@D_Name = D_Name,
@DR_RequestDate = DR_RequestDate,
@UF_LinkedFiles = UF_LinkedFiles,
@DRN_Names = DRN_Names,
@DR_Description = DR_Description,
@DR_CreatedOn = DR_CreatedOn
FROM
dbo.FN_GetDataRequest(@DR_Id)

SELECT @analystMailList = dbo.FN_GetAnalystsMailList()

IF (LEN(@UF_LinkedFiles) > 0)
BEGIN
SET @downloadLink = N'<a href="http://localhost:8500/workrequest/index.cfm?event=downloads.index&id=' + CAST(@DR_Id AS VARCHAR(10)) + N'&k='+ SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA', ':be9[Dcv9wF~W!?xx4JO0OXLbZ@0p4+[~z0dO|:U,OF!13^xZb')), 3, 32) + N'">Downloads</a>'
END

SET @tableHTML =
N'<H1>Data Request</H1>' +
N'<UL>' +
N'<LI>Full Name: ' + @UF_LinkedFiles + N'</LI>' +
N'<LI>Email: ' + @DR_Email + N'</LI>' +
N'<LI>Phone: ' + CAST(@DR_Phone AS VARCHAR(20)) + N'</LI>' +
N'<LI>User Type: ' + @UT_Name + N'</LI>' +
N'<LI>User Type Other: ' + COALESCE(@DR_UserTypeOther, N'NONE') + N'</LI>' +
N'<LI>Reuest Date: ' + CONVERT(VARCHAR(20), @DR_RequestDate, 107) + N'</LI>' +
N'<LI>Downloads: ' + @downloadLink + N'</LI>' +
N'</UL>';

BEGIN
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Example',
@recipients = 'John Doe<jdoe@example>',
--@recipients = @analystMailList,
@reply_to = @DR_Email,
@subject = 'Email Test',
@body_format = 'HTML',
@body = @tableHtml
END
END
GO

当存在 时触发上述触发器行插入 表操作 数据请求 .行插入操作后,我取 身份 之后生成的元素插入 操作并将其用作外键,并在不同的表中插入其他值。最后,我使用两个表中的值并创建要发送的电子邮件。

我没有从其他表中获取值(例如 @UF_LinkedFiles ),所以我意识到 触发器 之后被解雇插入 第一 表但在 之前插入 第二 表,因此当 时没有可用的值发邮件 .

那么我如何确保 触发器 只有在完成所有 的 SPROC 之后才会触发插入 多个表中的事件已完成事务。

下面是表格图——
Tables

最佳答案

我没有使用触发器,而是在插入行的 SPROC 中包含了 EMAIL SENDING 代码。

关于sql - SPROC 完成执行后如何触发触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24334863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com