0
declare @myDoc xml
set @myDoc = '<Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.mydomain.org/MySchema.xsd" SectionId="ABCD" Description="Some stuff">
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Form>'

;WITH XMLNAMESPACES(  'http://www.w3.org/2001/XMLSchema-instance' as xsi, 'http://www.w3.org/2001/XMLSchema' as xsd, DEFAULT 'http://www.mydomain.org/MySchema.xsd' )
SELECT @myDoc.value('/Form[@SectionId][0]', 'varchar')

SectionIdの属性値をnvarcharとして取得する必要がありますか?どうすればいいのですか ?...

TおよびRマーク

4

2 に答える 2

1

あなたはそれをさらに簡単に書くことができます:

;WITH XMLNAMESPACES(DEFAULT 'http://www.mydomain.org/MySchema.xsd')
SELECT @myDoc.value('(/Form/@SectionId)[1]', 'VARCHAR(100)') AS SectionId

xsiまたはxsd名前空間を使用/参照したことがないため、それらを宣言する必要はありません。

.nodes()また、1つの要素から1つの属性のみをフェッチしているため、この関数を使用して内部の「ダミーテーブル」を作成しても意味がありません。

于 2010-11-11T11:53:54.207 に答える
0
;WITH XMLNAMESPACES(  'http://www.w3.org/2001/XMLSchema-instance' as xsi, 'http://www.w3.org/2001/XMLSchema' as xsd, DEFAULT 'http://www.mydomain.org/MySchema.xsd' )
SELECT Node.value('@SectionId', 'VARCHAR(100)') AS SectionId
FROM @myDoc.nodes('/Form') TempXML (Node);
于 2010-11-11T10:39:36.437 に答える