2015-11-09 36 views
0

SQL Server 2008 R2Xpath查詢 - 字段顯示空

我有以下CTE和XPath查詢,我遇到了問題。

IF OBJECT_ID('tempdb..#TempXML') IS NOT NULL 
    DROP TABLE #TempXML; 

WITH ConvertedToXML AS 
( 
SELECT top 500 xml_msg AsVarchar 
,status [status] 
,date_received 
,CAST(xml_msg AS XML) AS AsXml 
FROM interface_master_out 
order by date_received desc 
) 

SELECT 
ConvertedToXML.AsXml.value('(//InstrumentID)[1]', 'varchar(max)') AS InstrumentID 
,ConvertedToXML.AsXml.value('(//MessageType)[1]', 'Varchar(10)') as MessageType 
,ConvertedToXML.AsXml.value('(//MessageID)[1]', 'Varchar(10)') as MessageID 
,ConvertedToXML.AsXml.value('(//date_received)[1]', 'datetime') as date_received 
,ConvertedToXML.AsXml.value('(//status)[1]', 'Varchar(10)') as [Status] 
,ConvertedToXML.AsVarchar 
,ConvertedToXML.AsXml 
Into #TempXML 
FROM ConvertedToXML 
where ConvertedToXML.AsXml.value('(//InstrumentID)[1]', 'varchar(max)') in ('BA1254890001'); 

select * from #TempXML 
drop table #TempXML 

date_received和狀態都是空的,我不知道爲什麼。我已將in ()配對爲單個值,但其中有30個。

+1

您獲得其他值,但不是'date_recieved'和'status'?請張貼XML的相關部分! – Shnugo

+0

也許命名空間相關的問題,但誰知道確實沒有XML示例,可以證明問題.. – har07

+0

好吧,我不知道我應該如何繼續,因爲XML文件非常大,幷包含機密數據。 –

回答

0

一旦我充分利用這一點,我實際上很容易。以下是修改後的工作代碼:

Use MyDatabase 
IF OBJECT_ID('tempdb..#TempXML') IS NOT NULL 
    DROP TABLE #TempXML; 

WITH ConvertedToXML AS 
( 
SELECT top 50 xml_msg AsVarchar 
,status Status 
,date_received DateTime 
,CAST(xml_msg AS XML) AS AsXml 
FROM interface_master_out 
order by date_received desc 
) 

SELECT 
ConvertedToXML.AsXml.value('(//InstrumentID)[1]', 'varchar(max)') AS InstrumentID 
,ConvertedToXML.AsXml.value('(//MessageType)[1]', 'Varchar(10)') as MessageType 
,ConvertedToXML.AsXml.value('(//MessageID)[1]', 'Varchar(10)') as MessageID 
,ConvertedToXML.Status 
,ConvertedToXML.DateTime 
,ConvertedToXML.AsVarchar 
,ConvertedToXML.AsXml 
Into #TempXML 
FROM ConvertedToXML 
where ConvertedToXML.AsXml.value('(//InstrumentID)[1]', 'varchar(max)') = ('BA1254890001') 

select * from #TempXML 
drop table #TempXML