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
分类:
SQL Server
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!