SSB FAQ (3) – A rowset provider OPENXML
SSB FAQ (3) – A rowset provider OPENXML
OPENXML provides a rowset view over an XML document.
OPENXML SYNTAX:
OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] )
[ WITH ( SchemaDeclaration | TableName ) ]
ARGUMENTS:
idoc
Is the document handle of the internal representation of an XML document. The internal representation of an XML document is created by calling sp_xml_preparedocument.
rowpattern
Is the XPath pattern used to identify the nodes to be processed as rows.
flags 参数值设置为 1,表示以属性为中心的映射。
flags 设置为 2 时(表示以元素为中心的映射)。
Default value is 0, attribute-centric mapping.
CODE SNIPPET:
At first, send a message to target queue, and use the following SELECT script to check the XML message:
Select top 1 Cast(message_body as XML) From Queue_OutStock_Out
OUT XML MESSAGE:
<ROOT><OutStock><CustomerSysNo>212003</CustomerSysNo><SOAmt>120</SOAmt></OutStock></ROOT>
……. Retrieve XML message from target queue and handle it:
if @message_type_name = 'SendMessageType_OutStock'
BEGIN
Declare @docHandle int
EXEC sp_xml_preparedocument @docHandle OUTPUT, @message_body
Select @CustomerSysNo=CustomerSysNo, @SOAmt=SOAmt
From OPENXML(@docHandle, '/ROOT/OutStock', 2)
With (CustomerSysNo int, SOAmt decimal)
print @CustomerSysNo
print @SOAmt
EXEC sp_xml_removedocument @docHandle
……
First, sp_xml_preparedocument is called to obtain a document handle. This document handle is passed to OPENXML.
Because the WITH clause is not provided, OPENXML returns the rowset in an edge table format.
Then the SELECT statement retrieves all the columns in the edge table.
Finally, sp_xml_removedocument is used to free up the memory.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?