Data Model for Message Receiver

 

1. Physical Data Model

 

2. SQL Statements

drop database MessageReceiver
go

/*==============================================================*/
/* Database: MessageReceiver                                    */
/*==============================================================*/
create database MessageReceiver
go

use MessageReceiver
go

/*==============================================================*/
/* Table: ReceiveMessage                                        */
/*==============================================================*/
create table ReceiveMessage (
   ID                   int                  identity,
   MessageType          nvarchar(200)        not null,
   Operation            smallint             not null,
   Content              nvarchar(max)        not null,
   IsCompleted          bit                  not null,
   TraceID              uniqueidentifier     not null default newid(),
   constraint PK_RECEIVEMESSAGE primary key (ID)
)
go

/*==============================================================*/
/* Table: ReceiveMessageLog                                     */
/*==============================================================*/
create table ReceiveMessageLog (
   ID                   int                  identity,
   ReceiveMessageID     int                  not null,
   LogTime              datetime             not null default getdate(),
   Remark               nvarchar(100)        null,
   constraint PK_RECEIVEMESSAGELOG primary key (ID)
)
go

/*==============================================================*/
/* Index: ix_ReceiveMessageLog_MsgID                            */
/*==============================================================*/
create index ix_ReceiveMessageLog_MsgID on ReceiveMessageLog (
ReceiveMessageID ASC
)
go

/*==============================================================*/
/* Table: SendMessage                                           */
/*==============================================================*/
create table SendMessage (
   ID                   int                  identity,
   MessageType          nvarchar(200)        not null,
   Operation            smallint             not null,
   Content              nvarchar(max)        not null,
   IsArrived            bit                  not null,
   TraceID              uniqueidentifier     not null default newid(),
   constraint PK_SENDMESSAGE primary key (ID)
)
go

/*==============================================================*/
/* Table: SendMessageLog                                        */
/*==============================================================*/
create table SendMessageLog (
   ID                   int                  identity,
   SendMessageID        int                  not null,
   LogTime              datetime             not null default getdate(),
   Remark               nvarchar(100)        null,
   constraint PK_SENDMESSAGELOG primary key (ID)
)
go

/*==============================================================*/
/* Index: ix_SendMessageLog_MsgID                               */
/*==============================================================*/
create index ix_SendMessageLog_MsgID on SendMessageLog (
SendMessageID ASC
)
go

alter table ReceiveMessageLog
   add constraint fk_ReceiveMessage_ReceiveMessageID foreign key (ReceiveMessageID)
      references ReceiveMessage (ID)
go

alter table SendMessageLog
   add constraint fk_SendMessageLog_SendMessageID foreign key (SendMessageID)
      references SendMessage (ID)
go


create procedure up_SendMessageToRemoteServer
as
declare @SendMessageID int,@MessageType nvarchar(200),@Operation smallint,@Content nvarchar(max),@TraceID uniqueidentifier
while(1=1)
begin
    set @SendMessageID=null
    select top(1)    @SendMessageID=ID,
                    @MessageType=MessageType,
                    @Operation=Operation,
                    @Content=Content,
                    @TraceID=TraceID
        from SendMessage a
        where a.IsArrived = 0
        order by a.ID
    if (@SendMessageID is null) break
    
    exec Server001.MessageReceiver.dbo.up_cReceiveMessageForRemoteServer 
            @MessageType =@MessageType, 
            @Operation = @Operation,
            @Content = @Content,
            @TraceID=@TraceID
 
    if (@@error <> 0) break
    exec up_cSendMessageLog 
        @SendMessageID = @SendMessageID,
        @Remark = N'发送',
        @IsArrived = 1
end
go


create procedure up_cReceiveMessage
(
    @MessageType nvarchar(200),
    @Operation smallint,
    @Content nvarchar(max)
)
as
begin try
    begin transaction
        declare @ReceiveMessageID int  
 
        insert into ReceiveMessage ( MessageType, Operation, Content,IsCompleted)
            values(@MessageType,@Operation,@Content,0)
        
        set @ReceiveMessageID=scope_identity()
        
        insert into ReceiveMessageLog ( ReceiveMessageID, Remark )
            values(@ReceiveMessageID,N'接收.')
 
    commit transaction  
end try
begin catch 
    declare @error nvarchar(2048)=error_message()
    ;throw 50001 ,@error,1
    if (@@trancount >0) rollback transaction
end catch
go


create procedure up_cReceiveMessageForRemoteServer
(
    @MessageType nvarchar(200),
    @Operation smallint,
    @Content nvarchar(max),
    @TraceID uniqueidentifier
)
as
begin try
    begin transaction
        declare @ReceiveMessageID int  
 
        insert into ReceiveMessage ( MessageType, Operation, Content,IsCompleted,TraceID)
            values(@MessageType,@Operation,@Content,0,@TraceID)
        
        set @ReceiveMessageID=scope_identity()
        
        insert into ReceiveMessageLog ( ReceiveMessageID, Remark )
            values(@ReceiveMessageID,N'接收.')
 
    commit transaction  
end try
begin catch 
    declare @error nvarchar(2048)=error_message()
    ;throw 50001 ,@error,1
    if (@@trancount >0) rollback transaction
end catch
go


create procedure up_cReceiveMessageLog
(
    @ReceiveMessageID int,
    @Remark nvarchar(100),
    @IsCompleted bit
)
as
begin try
    begin transaction        
 
        insert into ReceiveMessageLog ( ReceiveMessageID, Remark )
            values(@ReceiveMessageID,@Remark)
            
        update ReceiveMessage set IsCompleted=@IsCompleted where ID=@ReceiveMessageID
        
    commit transaction  
end try
begin catch 
    declare @error nvarchar(2048)=error_message()
    ;throw 50001 ,@error,1
    if (@@trancount >0) rollback transaction
end catch
go


create procedure up_cSendMessage
(
    @MessageType nvarchar(200),
    @Operation smallint,
    @Content nvarchar(max)
)
as
begin try
    begin transaction
        declare @SendMessageID int  
 
        insert into SendMessage ( MessageType, Operation, Content,IsArrived)
            values(@MessageType,@Operation,@Content,0)
        
        set @SendMessageID=scope_identity()
        
        insert into SendMessageLog ( SendMessageID, Remark )
            values(@SendMessageID,N'接收.')
 
    commit transaction  
end try
begin catch 
    declare @error nvarchar(2048)=error_message()
    ;throw 50001 ,@error,1
    if (@@trancount >0) rollback transaction
end catch
go


create procedure up_cSendMessageLog
(
    @SendMessageID int,
    @Remark nvarchar(100),
    @IsArrived bit
)
as
begin try
    begin transaction        
 
        insert into SendMessageLog ( SendMessageID, Remark )
            values(@SendMessageID,@Remark)
            
        update SendMessage set IsArrived=@IsArrived where ID=@SendMessageID
        
    commit transaction  
end try
begin catch 
    declare @error nvarchar(2048)=error_message()
    ;throw 50001 ,@error,1
    if (@@trancount >0) rollback transaction
end catch
go


create procedure up_dReceiveMessageWithCompleted
as
set nocount on
begin try
    begin transaction
        declare @tb_del table(ID int)  
        insert into @tb_del(ID) select ID from ReceiveMessage where IsCompleted=1

        delete a from ReceiveMessageLog a where exists(select 1 from @tb_del x where x.ID=a.ReceiveMessageID)
        
        delete a from ReceiveMessage a where exists(select 1 from @tb_del x where x.ID=a.ID)
 
    commit transaction  
end try
begin catch 
    declare @error nvarchar(2048)=error_message()
    ;throw 50001 ,@error,1
    if (@@trancount >0) rollback transaction
end catch
go


create procedure up_dSendMessageWithArrived
as
begin try
    begin transaction
    
        declare @tb_del table(ID int)  
        insert into @tb_del(ID) select ID from SendMessage where IsArrived=1
 
        delete a from SendMessageLog a where exists(select 1 from @tb_del x where x.ID=a.SendMessageID)
        
        delete a from SendMessage a where exists(select 1 from @tb_del x where x.ID=a.ID)

    commit transaction  
end try
begin catch 
    declare @error nvarchar(2048)=error_message()
    ;throw 50001 ,@error,1
    if (@@trancount >0) rollback transaction
end catch
go

 

posted @ 2017-02-25 22:55 ok_008 阅读(...) 评论(...) 编辑 收藏
给我写信