第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

重構(gòu)可讓SQL提高可維護(hù)性

標(biāo)簽:
MySQL

重构,每天对Insus.NET来说,是必须的工作,不过一直是着重C#程序。昨晚在家中修改SQL一个小问题时,无意中看到一个触发器虽然它能正确运行,但值得重构它。

这个触发器功能是当用户预定会议室成功之后,系统会发送一封预定成功的确认函邮件。下面代码是原始触发器

tri_MeetingRoomBooking_BookingSuccessNotify SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        Insus.NET
-- Create date:   2011-08-07
-- Description:   Meeting Room Booking success notify
-- =============================================

CREATE TRIGGER [dbo].[tri_MeetingRoomBooking_BookingSuccessNotify]
ON [dbo].[MeetingRoomBooking]
FOR INSERT
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @MeetingRoomBookingId INT, @ContactEmail NVARCHAR(150),@CreateBy INT,@ContentPagePath NVARCHAR(1000)    
    
    --从INSERTED内存虚拟表给变量赋值    
    SELECT @MeetingRoomBookingId = [MeetingRoomBookingId],@ContactEmail = [Email],@CreateBy = [CreateBy] FROM INSERTED
    
    --设定邮件Web地址
    SET @ContentPagePath = N'http://www.yourcompany.com/MailNotify/BookingSuccess.aspx?ID=' + CONVERT(NVARCHAR(100),@MeetingRoomBookingId)
    
    --从Users表中找到预定人的邮箱
    DECLARE @CreaterEmail NVARCHAR(200)
    SELECT @CreaterEmail = [Email] FROM [dbo].[Users] WHERE [UsersId] = @CreateBy        
    
    --判断预定人与会议联系人是否为同一个人,还是帮助别人预定,并把相关的信息插入邮件发送列表中。
    IF (@ContactEmail = @CreaterEmail)    
        EXECUTE [dbo].[usp_MailingList_Insert] @Email = @ContactEmail,@Subject = N'会议室预定成功确认函',@HtmlPagePath = @ContentPagePath,@EmailParameterId = 2;
    ELSE
    BEGIN
        EXECUTE [dbo].[usp_MailingList_Insert] @Email = @ContactEmail,@Subject = N'会议室预定成功确认函',@HtmlPagePath = @ContentPagePath,@EmailParameterId = 2;
        EXECUTE [dbo].[usp_MailingList_Insert] @Email = @CreaterEmail,@Subject = N'会议室预定成功确认函',@HtmlPagePath = @ContentPagePath,@EmailParameterId = 2;
    END
END

 

重构过程以一些想法,

变量@MeetingRoomBookingId宣告的数据类型由INT改为NVARCHAR(100),这样在设置邮件Web地址时,无需对CONVERT(NVARCHAR(100),@MeetingRoomBookingId)
转换了:......aspx?ID=' + @MeetingRoomBookingId

 

从Users表中找到预定人的邮箱,是先宣告变量,由于是使用SQL2008,可以在宣告变量之后,马上赋值: 

DECLARE @CreaterEmail NVARCHAR(200) = (SELECT [Email] FROM [dbo].[Users] WHERE [UsersId] = @CreateBy)

 

邮件标题,可以重构放入一个变量之中,某一天需要更改它时,只改一次即可。

@Subject NVARCHAR(50) = N'会议室预定成功确认函'

 

接下是此次重构的重点是判断预定人与会议联系人是否为同一个人,还帮助别人预定,并把相关的信息插入邮件发送列表中。正常判断如原始代码写法一样,当同一个人时,直接发送给预定人就行了,如果不是同一个人,要把预定成功的邮件发送给预定人和会议联系人。

此次,Insus.NET使用了反方式判断,判断由相等,改为不相等,减少IF的层次和可以节省一代码以及提高可维护性:

IF (@ContactEmail <> @CreaterEmail)    
    EXECUTE [dbo].[usp_MailingList_Insert] @Email = @CreaterEmail,@Subject = @Subject,@HtmlPagePath = @ContentPagePath,@EmailParameterId = 2;
        
EXECUTE [dbo].[usp_MailingList_Insert] @Email = @ContactEmail,@Subject = @Subject,@HtmlPagePath = @ContentPagePath,@EmailParameterId = 2;

 

重构之后,完整代码:

tri_MeetingRoomBooking_BookingSuccessNotify SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        Insus.NET
-- Create date:   2011-08-07
-- Description:   Meeting Room Booking success notify
-- =============================================

ALTER TRIGGER [dbo].[tri_MeetingRoomBooking_BookingSuccessNotify]
ON [dbo].[MeetingRoomBooking]
FOR INSERT
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @MeetingRoomBookingId NVARCHAR(100), @ContactEmail NVARCHAR(150),@Subject NVARCHAR(50) = N'会议室预定成功确认函',@CreateBy INT,@ContentPagePath NVARCHAR(1000)    
    
    --从INSERTED内存虚拟表给变量赋值    
    SELECT @MeetingRoomBookingId = [MeetingRoomBookingId],@ContactEmail = [Email],@CreateBy = [CreateBy] FROM INSERTED
    
    --设定邮件Web地址
    SET @ContentPagePath = N'http://www.yourcompany.com/MailNotify/BookingSuccess.aspx?ID=' + @MeetingRoomBookingId
    
    --从Users表中找到预定人的邮箱
    DECLARE @CreaterEmail NVARCHAR(200) = (SELECT [Email] FROM [dbo].[Users] WHERE [UsersId] = @CreateBy)    
    
    --判断预定人与会议联系人是否为同一个人,还是帮助别人预定,并把相关的信息插入邮件发送列表中。    
    IF (@ContactEmail <> @CreaterEmail)    
        EXECUTE [dbo].[usp_MailingList_Insert] @Email = @CreaterEmail,@Subject = @Subject,@HtmlPagePath = @ContentPagePath,@EmailParameterId = 2;
        
    EXECUTE [dbo].[usp_MailingList_Insert] @Email = @ContactEmail,@Subject = @Subject,@HtmlPagePath = @ContentPagePath,@EmailParameterId = 2;
END

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消