2

Xml データ型からいくつかの値を取得しようとしています。データは次のようになります。

<Individual xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <FirstName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Lirria</FirstName>
    <LastName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Latimore</LastName>
</Indvidual>

FirstName 要素と LastName 要素に xmlns が存在することに注意してください。これは、ac# ビジネス オブジェクトをシリアル化して xml を作成するときに追加されます。とにかく、要素にこの名前空間が存在すると、次のような XQuery 式が失敗するようです。

SELECT MyTable.value('(//Individual/LastName)[1]','nvarchar(100)') AS FirstName

これは null を返します。しかし、xml の要素から名前空間を取り除くと (たとえば、Replace T-SQL ステートメントを使用して)、上記は値を返します。ただし、より良い方法があるはずです。最初にxmlを更新せずに、このクエリを機能させる方法はありますか?

ありがとう

ジョン・デイビス

4

2 に答える 2

7

選択する要素に適切な名前を付ける必要があります。WITHXMLNAMESPACESを使用したネームスペースの追加を参照してください。XMLを使用した例を次に示します。

declare @x xml;
set @x = N'<Individual 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <FirstName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Lirria</FirstName>
        <LastName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Latimore</LastName>
    </Individual>';

with xmlnamespaces (N'http://nswcc.org.au/BusinessEntities.Crm' as crm)
select @x.value(N'(//Individual/crm:LastName)[1]',N'nvarchar(100)') AS FirstName
于 2009-10-19T04:29:57.513 に答える
0

* ワイルドカードを使用すると、明示的な名前空間を強制せずに要素を選択することもできます。Remus の答えは道のりですが、これは名前空間の問題を抱えている他の人を助けるかもしれません:

select @x.value(N'(//Individual/*:LastName)[1]',N'nvarchar(100)')
于 2014-03-21T11:50:30.030 に答える