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.

 

 

 

posted @ 2006-12-27 22:04  Rickie  阅读(502)  评论(0编辑  收藏  举报