2

Xml 列は行を返しません。
以下では、テーブル タイプとそのテーブルに挿入された xml 値を作成しました。以下の 2 つのクエリを実行した後、値は返されません。
Xml データは有効なデータです。

DECLARE @Test TABLE (Id INT IDENTITY (1,1), XMLDATA XML)

INSERT INTO @test
SELECT '
<TXLife xmlns="http://ACORD.org/Standards/Life/2" xmlns:tx="http://ACORD.org/Standards/Life/2" Version="2.20.00">
    <TXLifeRequest PrimaryObjectID="Holding_1">
        <CorrelationGUID>4b30545a-158b-441a-a37a-0b259f757059</CorrelationGUID>
    </TXLifeRequest>
</TXLife>'

SELECT 
      Id
    , XMLDATA.query('//CorrelationGUID') AS 'TransType'
    , XMLDATA
FROM @test

SELECT C.value('./CorrelationGUID[1]', 'varchar(50)') AS 'TransType'
FROM @test
CROSS APPLY XMLDATA.nodes('/TXLife/TXLifeRequest') n (C)
4

3 に答える 3

1

コードをCREATE TABLE, hereおよびhereでテストすると、フィルター処理されていない選択がうまく機能します。ただし、2 番目のフィルター処理された選択では結果が返されません。

@Devartの回答のように、クエリを変更して正しい名前空間を指定すると、

WITH XMLNAMESPACES (DEFAULT 'http://ACORD.org/Standards/Life/2')
SELECT
        C.value('./CorrelationGUID[1]', 'varchar(50)') AS 'TransType'
    FROM
        Test
    CROSS APPLY
        XMLDATA.nodes('/TXLife/TXLifeRequest') n (C)

ご覧のとおり、期待どおりに動作します。

于 2013-08-27T09:01:38.230 に答える
1

名前空間を宣言する必要があります。これを試して:

SELECT
  XMLDATA.value('declare namespace L="http://ACORD.org/Standards/Life/2";(//L:CorrelationGUID)[1]',
                'UNIQUEIDENTIFIER') AS 'TransType'
FROM   @test

UNION ALL

SELECT
  C.value('declare namespace L="http://ACORD.org/Standards/Life/2";(./L:CorrelationGUID)[1]',
          'UNIQUEIDENTIFIER') AS 'TransType'
FROM   @test
CROSS APPLY
  XMLDATA.nodes('declare namespace L="http://ACORD.org/Standards/Life/2";/L:TXLife/L:TXLifeRequest') N(C)

ここで動作することを確認してください。

于 2013-08-27T09:23:16.673 に答える
1

これを試してみてください -

DECLARE @XML XML
SELECT  @XML = '
<TXLife xmlns="http://ACORD.org/Standards/Life/2" xmlns:tx="http://ACORD.org/Standards/Life/2" Version="2.20.00">
    <TXLifeRequest PrimaryObjectID="Holding_1">
        <CorrelationGUID>4b30545a-158b-441a-a37a-0b259f757059</CorrelationGUID>
    </TXLifeRequest>
</TXLife>'

;WITH XMLNAMESPACES (DEFAULT 'http://ACORD.org/Standards/Life/2')
SELECT t.c.value('CorrelationGUID[1]', 'UNIQUEIDENTIFIER')
FROM @XML.nodes('//TXLifeRequest') t(c)

出力 -

------------------------------------
4B30545A-158B-441A-A37A-0B259F757059
于 2013-08-27T08:55:55.990 に答える