SQLServer实战经验分享--ServiceBroker安全配置和使用示例
2009-02-12 10:23:49 来源:WEB开发网目标方
定义队列处理存储过程
CREATEPROCEDUREdbo.usp_msgOperation_CMDAS
RETURN0
GO
定义队列
CREATEQUEUEmsgOperationProcessQueue
WITH
STATUS=ON,
RETENTION=OFF,
ACTIVATION
(
STATUS=ON,
PROCEDURE_NAME=dbo.usp_msgOperation_CMD,
MAX_QUEUE_READERS=1,
EXECUTEASSELF
);
实现队列处理存储过程
ALTERPROCEDUREdbo.usp_msgOperation_CMD
AS
declare@message_bodyasxml;
declare@message_typeassysname;
declare@dialogasuniqueidentifier;
WHILE(1=1)
BEGIN
BEGINTRANSACTION
--接收下一条可用的消息
WAITFOR(
RECEIVETOP(1)--一次只处理一条消息
@message_type=message_type_name,
@message_body=message_body,
@dialog=[conversation_handle]
FROMdbo.msgOperationProcessQueue
),TIMEOUT2000
--如果没收到任何消息则跳出循环
IF(@@ROWCOUNT=0)
BEGIN
ROLLBACKTRANSACTION
BREAK;
END
--根据接收的消息类型执行不同的消息处理逻辑
IF(@message_type='http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog')
BEGIN
ENDCONVERSATION@dialog;
END
ELSEIF(@message_type='http://schemas.microsoft.com/SQL/ServiceBroker/Error')
BEGIN
ENDCONVERSATION@dialog;
END
ELSEIF(@message_type='http://Samples/SQL/ServiceBroker/msgOperation')
BEGIN
declare@msgIdint
declare@msgContentnvarchar(2000)
BEGINTRY
SET@msgId=@message_body.value('data(//msgId)[1]','int');
SET@msgContent=@message_body.value('data(//msgContent)[1]','nvarchar(2000)');
--此处可以处理自定义业务逻辑
ENDCONVERSATION@dialog;
ENDTRY
BEGINCATCH
ROLLBACKTRANSACTION
CONTINUE
ENDCATCH
END
COMMITTRANSACTION
END
GO
- ››sqlserver安装和简单的使用
- ››SqlServer触发器、存储过程和函数
- ››SQLServer建立交叉表查询
- ››SqlServer强制断开数据库连接的方法
- ››SQLServer 2005 海量数据解决方案
- ››SQLServer 2008数据库查看死锁、堵塞的SQL语句
- ››SqlServer 插入多条数据
- ››SQLServer 2008 R2导出的SQL文件中没有数据
- ››SQLSERVER通过游标查询两个数据表共有字段名组合成...
- ››sqlserver2008实现拼音首字母和随机n位数的生成
- ››SQLServer与Java数据类型对应表
- ››实战:企业使用交换机VLAN路由配置
更多精彩
赞助商链接