PowerDesigner16.5——实现E-R图提交版本之后做邮箱自动推送提醒


IF EXISTS ( SELECT * FROM sys.procedures WHERE name = 'sp_Send_ER_Mail' )
    DROP PROC dbo.sp_Send_ER_Mail ;
GO

CREATE PROC sp_Send_ER_Mail
AS
BEGIN
    SET NOCOUNT ON ;

    SET XACT_ABORT ON ;

    IF NOT EXISTS ( SELECT * FROM dbo.sp_MailAccount_Setting )
        RETURN ;

    ---1.定义参数
    BEGIN

        --待发送账户,用';'分割
        DECLARE @Account_SQL NVARCHAR (MAX) ;
        --邮件内容
        DECLARE @Body NVARCHAR (MAX) ;
        --邮件队列ID
        DECLARE @MailItemID INT ;
        --主题
        DECLARE @Subject NVARCHAR (100) = N'' ;
        --ER图版本ID
        DECLARE @ERVerID INT ;
        --当前时间
        DECLARE @NowDate DATETIME ;

        --版本记录表变量
        DECLARE @Temp_Table TABLE ( CombinSQL NVARCHAR (MAX)) ;
    END ;

    ---2.参数赋值(下面所有的BAcount_ER_Map_Version_DB都改成对应自己的仓库数据库)
    BEGIN
        SET @Account_SQL = ( SELECT Account + ';' FROM dbo.sp_MailAccount_Setting FOR XML PATH('')) ;
        SET @ERVerID = COALESCE(( SELECT MAX(ERVerID)FROM dbo.sp_ER_Mail_Record ), 0) ;

        IF NOT EXISTS ( SELECT * FROM BAcount_ER_Map_Version_DB.dbo.PMOBJT WHERE POID = 102 AND VCMT > @ERVerID )
            RETURN ;

        SET @Subject = (
                           SELECT MAX(A.NAME)FROM BAcount_ER_Map_Version_DB.dbo.PMOBJT A WHERE A.POID = 102
                       ) + N'项目ER图新提交版本;' + CHAR(39) ;

        WITH CTE AS
        (
            SELECT ROW_NUMBER() OVER ( ORDER BY A.OCDT ) AS Ver,
                   A.VCMT,
                   A.OCDT,
                   B.TDAT
            FROM   BAcount_ER_Map_Version_DB.dbo.PMOBJT A
                   INNER JOIN BAcount_ER_Map_Version_DB.dbo.PMTEXT B ON A.VCMT = B.TXID
            WHERE
                   A.POID = 102
        ),
             CTE2 AS
        (
            SELECT ( CONVERT(NVARCHAR (100), DATEADD(HOUR, 8, CTE.OCDT), 20) + ' 提交Ver' + CONVERT(NVARCHAR (10), CTE.Ver) + '.0:' + CHAR(10) + CTE.TDAT )
                   + CHAR(10) AS CombinSQL
            FROM   CTE
            WHERE
                   CTE.VCMT > @ERVerID
        )
        INSERT INTO @Temp_Table ( CombinSQL ) SELECT CombinSQL FROM CTE2 ;

        SET @Body = ( SELECT CombinSQL + CHAR(10)FROM @Temp_Table FOR XML PATH('')) ;
        SET @NowDate = GETDATE() ;
    END ;

    ---3.发送邮件,并写入日志
    BEGIN
        EXECUTE [msdb].[dbo].[sp_send_dbmail] @profile_name = 'Send_ER_Mail',
                                              @recipients = @Account_SQL,
                                              @body = @Body,
                                              @subject = @Subject,
                                              @mailitem_id = @MailItemID OUTPUT ;

        --重新获取最大ER版本ID
        SET @ERVerID = ( SELECT MAX(VCMT)FROM BAcount_ER_Map_Version_DB.dbo.PMOBJT ) ;

        INSERT INTO dbo.sp_ER_Mail_Record ( MailItemID, ERVerID, Recipient, Sender, MailSubject, MailBody, SendTime )
        SELECT @MailItemID,
               @ERVerID,
               Account,
               N'2059275450@qq.com',--(这里改成对应自己的发件邮箱)
               @Subject,
               @Body,
               @NowDate
        FROM   dbo.sp_MailAccount_Setting ;
    END ;
END ;

EXEC sp_MS_marksystemobject 'sp_Send_ER_Mail' ; --标识为系统对象
GO

背景:E-R图仓库存放在SQL server数据库中,之后的代码是基于SQL server实现

1.查询版本更替数据

直接给代码,在你对应的仓库数据库执行

WITH CTE AS
(
    SELECT A.NAME AS [仓库名称],
           A.CODE AS [仓库码],
           A.OCDT AS [提交时间],
           B.TDAT AS [备注],
           ROW_NUMBER() OVER ( ORDER BY A.OCDT ) AS [版本]
    FROM   dbo.PMOBJT A
           INNER JOIN dbo.PMTEXT B ON A.VCMT = B.TXID
    WHERE
           A.POID = 102
)
SELECT CTE.仓库名称, CTE.仓库码, CTE.版本, CTE.提交时间, CTE.备注 FROM CTE ;

下面是我本地仓库的查询结果

2.配置相关记录表/存储过程

(1)收件人Table:sp_MailAccount_Setting

IF EXISTS ( SELECT * FROM sys.tables WHERE name = 'sp_MailAccount_Setting' )
    DROP TABLE sp_MailAccount_Setting ;

CREATE TABLE sp_MailAccount_Setting
(
    Account     NVARCHAR (100), --邮箱账户
    AccountName NVARCHAR (100), --邮箱名称
    Memo        NVARCHAR (MAX)
) ;

EXEC sp_MS_marksystemobject 'sp_MailAccount_Setting' ; --标识为系统对象
GO

(2)发送记录Table:sp_ER_Mail_Record


IF EXISTS ( SELECT * FROM sys.tables WHERE name = 'sp_ER_Mail_Record' )
    DROP TABLE sp_ER_Mail_Record ;

CREATE TABLE sp_ER_Mail_Record
(
    MailItemID  INT,            --邮件队列ID
    ERVerID     INT,            --ER图版本ID
    Recipient   NVARCHAR (100), --收件人
    Sender      NVARCHAR (100), --发件人
    MailSubject NVARCHAR (100), --主题
    MailBody    NVARCHAR (MAX), --邮件内容
    SendTime    DATETIME        --发件时间
) ;

EXEC sp_MS_marksystemobject 'sp_ER_Mail_Record' ; --标识为系统对象
GO

(3)发送邮件存储过程


IF EXISTS ( SELECT * FROM sys.procedures WHERE name = 'sp_Send_ER_Mail' )
    DROP PROC dbo.sp_Send_ER_Mail ;
GO

CREATE PROC sp_Send_ER_Mail
AS
BEGIN
    SET NOCOUNT ON ;

    SET XACT_ABORT ON ;

    IF NOT EXISTS ( SELECT * FROM dbo.sp_MailAccount_Setting )
        RETURN ;

    ---1.定义参数
    BEGIN

        --待发送账户,用';'分割
        DECLARE @Account_SQL NVARCHAR (MAX) ;
        --邮件内容
        DECLARE @Body NVARCHAR (MAX) ;
        --邮件队列ID
        DECLARE @MailItemID INT ;
        --主题
        DECLARE @Subject NVARCHAR (100) = N'' ;
        --ER图版本ID
        DECLARE @ERVerID INT ;
        --当前时间
        DECLARE @NowDate DATETIME ;

        --版本记录表变量
        DECLARE @Temp_Table TABLE ( CombinSQL NVARCHAR (MAX)) ;
    END ;

    ---2.参数赋值(下面所有的BAcount_ER_Map_Version_DB替换成自己的邮箱)
    BEGIN
        SET @Account_SQL = ( SELECT Account + ';' FROM dbo.sp_MailAccount_Setting FOR XML PATH('')) ;
        SET @ERVerID = COALESCE(( SELECT MAX(ERVerID)FROM dbo.sp_ER_Mail_Record ), 0) ;

        IF NOT EXISTS ( SELECT * FROM BAcount_ER_Map_Version_DB.dbo.PMOBJT WHERE POID = 102 AND VCMT > @ERVerID )
            RETURN ;

        SET @Subject = (
                           SELECT MAX(A.NAME)FROM BAcount_ER_Map_Version_DB.dbo.PMOBJT A WHERE A.POID = 102
                       ) + N'项目ER图新提交版本;' + CHAR(39) ;

        WITH CTE AS
        (
            SELECT ROW_NUMBER() OVER ( ORDER BY A.OCDT ) AS Ver,
                   A.VCMT,
                   A.OCDT,
                   B.TDAT
            FROM   BAcount_ER_Map_Version_DB.dbo.PMOBJT A
                   INNER JOIN BAcount_ER_Map_Version_DB.dbo.PMTEXT B ON A.VCMT = B.TXID
            WHERE
                   A.POID = 102
        ),
             CTE2 AS
        (
            SELECT ( CONVERT(NVARCHAR (100), DATEADD(HOUR, 8, CTE.OCDT), 20) + ' 提交Ver' + CONVERT(NVARCHAR (10), CTE.Ver) + '.0:' + CHAR(10) + CTE.TDAT )
                   + CHAR(10) AS CombinSQL
            FROM   CTE
            WHERE
                   CTE.VCMT > @ERVerID
        )
        INSERT INTO @Temp_Table ( CombinSQL ) SELECT CombinSQL FROM CTE2 ;

        SET @Body = ( SELECT CombinSQL + CHAR(10)FROM @Temp_Table FOR XML PATH('')) ;
        SET @NowDate = GETDATE() ;
    END ;

    ---3.发送邮件,并写入日志
    BEGIN
        EXECUTE [msdb].[dbo].[sp_send_dbmail] @profile_name = 'Send_ER_Mail',--(填入自己配置好的发送邮件)
                                              @recipients = @Account_SQL,
                                              @body = @Body,
                                              @subject = @Subject,
                                              @mailitem_id = @MailItemID OUTPUT ;

        --重新获取最大ER版本ID
        SET @ERVerID = ( SELECT MAX(VCMT)FROM BAcount_ER_Map_Version_DB.dbo.PMOBJT ) ;

        INSERT INTO dbo.sp_ER_Mail_Record ( MailItemID, ERVerID, Recipient, Sender, MailSubject, MailBody, SendTime )
        SELECT @MailItemID,
               @ERVerID,
               Account,
               N'2059275450@qq.com',--(改成对应自己的发件邮箱)
               @Subject,
               @Body,
               @NowDate
        FROM   dbo.sp_MailAccount_Setting ;
    END ;
END ;

EXEC sp_MS_marksystemobject 'sp_Send_ER_Mail' ; --标识为系统对象
GO

(4)表触发器(在自己的仓库数据库执行)


CREATE TRIGGER dbo.PMTEXT_Insert_Trriger ON dbo.PMTEXT AFTER INSERT AS BEGIN
EXEC master.dbo.sp_Send_ER_Mail ;
END ;

3.配置发送邮件邮箱(本人用的QQ邮箱,推荐是几个讲的比较详细博主,可以参考,这里不做多赘述)

https://blog.csdn.net/jack8674/article/details/85058489

https://blog.csdn.net/HinKai/article/details/86525515

4.查看发送记录

 

以上,就是我们配置实现E-R图提交版本之后做邮箱自动推送提醒

------------原创,纯手打,觉得对您有帮助的话,帮忙点个赞哦!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PowerDesigner 16.5可以用来画E-R。E-R是一种数据建模工具,用于描述实体、属性和它们之间的关系。在PowerDesigner 16.5中,可以通过以下步骤来画E-R: 1. 打开PowerDesigner 16.5软件,选择“新建模型”。 2. 在“新建模型”对话框中,选择“数据建模”模板,然后选择“E-R模型”类型。 3. 在“E-R模型”中,可以添加实体、属性和关系。可以通过拖拽和放置来添加实体和属性,也可以通过连接线来添加关系。 4. 在添加实体和属性时,可以设置它们的名称、数据类型、长度等属性。 5. 在添加关系时,可以设置它们的类型(一对一、一对多、多对多等)、名称和参与实体等属性。 6. 画完E-R后,可以保存模型并导出为片或PDF格式。 以上就是用PowerDesigner 16.5画E-R的简要步骤。 ### 回答2: PowerDesigner是一种流行的建模工具,可用于设计和维护各种数据模型和架构,例如E-R(实体-关系)。PowerDesigner 16.5版本是该工具的最新版本,为用户提供了许多强大的功能和改进,包括更好的E-R工具。 要开始使用PowerDesigner 16.5画E-R,您需要先创建一个新的数据模型。从“开始”菜单中打开PowerDesigner,然后选择“新建数据模型”命令。您可以选择创建一个空模型或导入一个现有的模型文件。 在模型中,您可以添加实体和关系对象。在E-R中,实体表示一个具有独立存在的物理或逻辑概念,例如客户或订单。关系表示实体之间的联系,例如订单可以属于一个客户。在PowerDesigner 16.5中,您可以直接从“元素”菜单中添加实体和关系对象,或者使用快捷键Alt+E(实体)和Alt+R(关系)。 一旦添加实体和关系对象,您可以分配名称、属性和其他信息。在PowerDesigner 16.5中,您可以直接从属性面板中输入这些信息,也可以右键单击实体或关系对象并选择“属性”命令来进行更改。 关系对象的类型取决于实体之间的联系方式。例如,“一对一”关系表示两个实体之间只存在一个对应关系,而“多对多”关系表示两个实体之间存在多个对应关系。在PowerDesigner 16.5中,您可以在添加或编辑关系对象时选择关系类型,然后使用命令和属性面板来进一步定义。 最后,在E-R中,还有许多其他对象和功能,例如子实体、超类型/子类型、约束和分析注释。PowerDesigner 16.5提供了广泛的工具和选项,可帮助您轻松地管理这些方面。 总体而言,使用PowerDesigner 16.5来画E-R是一项简单而强大的任务。关键是找到正确的菜单命令和工具,然后熟练使用它们来创建、编辑和管理E-R模型。即使您是初学者,也可以参考PowerDesigner 16.5的帮助文档和指南,以了解更多关于E-R和其他重要概念的信息。 ### 回答3: PowerDesigner 16.5是一种企业级的建模工具,支持多种建模方法,包括E-R。以下是如何使用PowerDesigner 16.5画E-R的步骤: 第一步:打开PowerDesigner 16.5软件,选择“New Model”创建一个新建模型。在弹出的窗口中选择“Entity-Relationship Diagram”模型类型。 第二步:在建模窗口中,选择“Entity-Relationship Diagram”模型类型,然后单击“OK”按钮。接下来,您将看到一个新的画布,上面有一个空的E-R模板。 第三步:在E-R模板中添加实体和关系。在PowerDesigner 16.5中,您可以使用快捷键“Ctrl+E”或单击左侧的实体标来添加实体。要添加关系,可以使用快捷键“Ctrl+R”或单击左侧的关系标。您还可以通过鼠标右键单击标并选择“Add Entity”或“Add Relationship”来添加实体或关系。 第四步:定义实体和关系的属性。在添加实体和关系后,您可以用鼠标右键单击它们以打开属性页。在属性页中,您可以定义实体或关系的名称、描述、主键和索引等信息。 第五步:创建实体和关系之间的联系。在E-R中,实体与实体之间以及实体与关系之间可以有不同的联系。您可以使用快捷键“Ctrl+C”或单击左侧的联系标并拖动鼠标来创建联系,并在弹出的窗口中选择联系的类型。 第六步:保存E-R。完成E-R的创建后,您可以选择“File”>“Save As”将其保存为PowerDesigner 16.5支持的文件格式。或者,您也可以选择“File”>“Export”将其导出为其他文件格式,如PDF、PNG等。 通过上述步骤,您可以使用PowerDesigner 16.5轻松地创建高质量的E-R,这将是您建立数据库模型和设计实体关系的重要工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值