笔记22 service broker例子
笔记22 service broker例子
1 --service broker例子 2 --http://www.builder.com.cn/2007/0302/379424.shtml 3 USE master 4 5 GO 6 7 IF EXISTS ( SELECT * 8 FROM sys.databases 9 WHERE name = 'SB' ) 10 DROP DATABASE SB 11 12 GO 13 14 CREATE DATABASE SB 15 16 GO 17 18 ALTER DATABASE SB 19 20 SET ENABLE_BROKER 21 22 GO 23 24 USE SB; 25 26 GO 27 28 CREATE TABLE Sales 29 ( 30 SaleID INT IDENTITY(1, 1) , 31 SaleDate SMALLDATETIME , 32 SaleAmount MONEY , 33 ItemsSold INT 34 ); 35 36 GO 37 38 USE [SB] 39 CREATE MESSAGE TYPE [RecordSale] VALIDATION = NONE; 40 41 CREATE CONTRACT [SalesContract] 42 43 ( 44 45 [RecordSale] SENT BY INITIATOR 46 47 ); 48 49 GO 50 USE [SB] 51 52 CREATE QUEUE [SalesQueue]; 53 54 CREATE SERVICE [SalesService] ON QUEUE [SalesQueue]([SalesContract]); 55 56 GO 57 58 CREATE QUEUE [RecordSalesQueue]; 59 60 CREATE SERVICE [RecordSalesService] ON QUEUE [RecordSalesQueue]; 61 62 GO 63 64 65 CREATE PROCEDURE usp_RecordSaleMessage 66 AS 67 BEGIN 68 SET NOCOUNT ON; 69 DECLARE @Handle UNIQUEIDENTIFIER; 70 DECLARE @MessageType SYSNAME; 71 DECLARE @Message XML 72 DECLARE @SaleDate DATETIME 73 DECLARE @SaleAmount MONEY 74 DECLARE @ItemsSold INT; 75 RECEIVE TOP (1) @Handle = conversation_handle, @MessageType = message_type_name, @Message = message_body FROM [SalesQueue]; 76 IF ( @Handle IS NOT NULL 77 AND @Message IS NOT NULL 78 ) 79 BEGIN 80 SELECT @SaleDate = CAST(CAST(@Message.query('/Params/SaleDate/text()') AS NVARCHAR(MAX)) AS DATETIME) 81 SELECT @SaleAmount = CAST(CAST(@Message.query('/Params/SaleAmount/text()') AS NVARCHAR(MAX)) AS MONEY) 82 SELECT @ItemsSold = CAST(CAST(@Message.query('/Params/ItemsSold/text()') AS NVARCHAR(MAX)) AS INT) 83 INSERT INTO Sales 84 ( SaleDate , 85 SaleAmount , 86 ItemsSold 87 ) 88 VALUES ( @SaleDate , 89 @SaleAmount , 90 @ItemsSold 91 ); 92 END 93 END 94 GO 95 96 ALTER QUEUE [SalesQueue] WITH ACTIVATION 97 98 ( 99 100 STATUS = ON, 101 102 MAX_QUEUE_READERS = 1, 103 104 PROCEDURE_NAME = usp_RecordSaleMessage, 105 106 EXECUTE AS OWNER 107 108 ); 109 110 GO 111 112 113 CREATE PROCEDURE usp_SendSalesInfo 114 ( 115 @SaleDate SMALLDATETIME , 116 @SaleAmount MONEY , 117 @ItemsSold INT 118 ) 119 AS 120 BEGIN 121 DECLARE @MessageBody XML 122 CREATE TABLE #ProcParams 123 ( 124 SaleDate SMALLDATETIME , 125 SaleAmount MONEY , 126 ItemsSold INT 127 ) 128 INSERT INTO #ProcParams 129 ( SaleDate , 130 SaleAmount , 131 ItemsSold 132 ) 133 VALUES ( @SaleDate , 134 @SaleAmount , 135 @ItemsSold 136 ) 137 SELECT @MessageBody = ( SELECT * 138 FROM #ProcParams 139 FOR 140 XML PATH('Params') , 141 TYPE 142 ); 143 DECLARE @Handle UNIQUEIDENTIFIER; 144 BEGIN DIALOG CONVERSATION @Handle FROM SERVICE 145 [RecordSalesService] TO SERVICE 'SalesService' ON CONTRACT 146 [SalesContract] WITH ENCRYPTION = OFF; 147 SEND ON CONVERSATION @Handle MESSAGE TYPE [RecordSale](@MessageBody); 148 END 149 GO 150 151 152 153 154 155 156 157 EXECUTE usp_SendSalesInfo '1/9/2005', 30, 90 158 159 --执行这个过程后,运行下面的SELECT语句看Sales表中是否插入一条记录。 160 161 SELECT * FROM Sales;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现