SELECT文の "現在の"ノードからxsi:type属性を読みたいと思います。 のXQuery構文「@ {ます。http:それはエラーがスローされますようT-SQLからxsi:typeを読み取る
;WITH XMLNAMESPACES('http://mynamespace' AS ns)
SELECT
,OrderLineItemID = ref.value('@id', 'int')
,OrderLineItemParentID = ref.value('@parentId', 'int')
,ProductID = NULLIF(ref.query('Product/Id').value('.', 'varchar(255)'),'')
,ProductDescription = NULLIF(ref.query('Product/Description').value('.', 'varchar(255)'),'')
,ProductDomain = NULLIF(ref.query('Product/Domain').value('.', 'varchar(255)'),'')
,ProductAdditionalInfo = NULLIF(ref.query('Product/AdditionalInfo').value('.', 'varchar(255)'),'')
,Quantity = ref.query('Quantity').value('.', 'int')
,LineItemType = ref.value('@xsi:type','varchar(max)')
FROM tTEMP_XMLTABLE
CROSS APPLY xmlFile.nodes('/ns:data/OrderLineItems/OrderLineItem') R(ref)
私の問題は、ラインLineItemTypeです:次のように
<ns2:data xmlns:ns2="http://mynamespace">
<OrderLineItems>
<OrderLineItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:DeactivationLineItem" id="1">
<Product>
<Id>5300</Id>
<Description>DUMMY</Description>
<Domain>ddd</Domain>
</Product>
<Quantity>1</Quantity>
</OrderLineItem>
<OrderLineItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:ActivationLineItem" id="4">
<Product>
<Id>5340</Id>
<Description>DUMMY</Description>
<Domain>aaa</Domain>
</Product>
<Quantity>1</Quantity>
</OrderLineItem>
<OrderLineItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:DeactivationLineItem" id="12">
<Product>
<Id>53200</Id>
<Description>DUMMY</Description>
<Domain>ccc</Domain>
</Product>
<Quantity>21</Quantity>
</OrderLineItem>
</OrderLineItems>
</ns2:data>
私のselect文に見える:私のXMLは、このようになります// www.w3.org/2001/XMLSchema-instance}:typeは、」私は私がCROSSは適用され使用していない場合は、単一のタイプを読むことができていますので、それは奇妙である
がサポートされていません。
WITH XMLNAMESPACES ('http://mynamespace' as p)
SELECT CAST(xmlFile as XML).value('(/p:data/OrderLineItems/OrderLineItem/@xsi:type)[1]','nvarchar(max)')
from tTEMP_XMLTABLE;
2番目のステートメントはSQL Server 2005で機能します。クロス適用を使用する場合、xsi:type属性を読み取る可能性はありますか?ヘルプ
[この記事] [1]いくつかの助けになるかもしれません... [1]:http://stackoverflow.com/questions/2477237/how-to-select-the -value-of-the-xsitype-attribute-in-sql-server – mwigdahl
ありがとうございますが、これは私が投稿した2番目のSQL文について説明しています。私はCrossApplyですべてのタイプを読む必要があります – merror
面白いです。 "xmlFile"はどのようなタイプですか?私はxml型の変数に格納していれば、これをあなたのXML用に動作させることができました。 – mwigdahl