2013-08-27 67 views
2

Xml Column不返回行。
下面創建了插入到該表中的表類型和xml值。執行下面提到的兩個查詢後,不返回任何值。
Xml數據是有效的數據。從SQL查詢中選擇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) 

回答

1

嗯,如果我有CREATE TABLEherehere,未過濾選擇的作品就好了測試代碼。但是,第二個過濾的選擇不會返回任何結果。

如果我改變了查詢指定正確的命名空間,就像在@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) 

可以看到,it works as expected

+0

'TransType'爲空。 –

+0

@AlexFilipovici,看到我最後的小提琴鏈接,http://sqlfiddle.com/#!6/4d160/9 – Jodrell

+0

它的工作很好。謝謝 – Subin

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 
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) 

看到它的工作here