2014-11-09 2 views
1

XML 파일을 SQL Server에로드하려고 시도 중이지만 dtv:AppVersion 특성을로드 할 때 null 값이 나타납니다. 이 코드를 사용하고SQL Server에서 XML을로드하면 null이 반환됩니다.

를로드 : 실수 어디 :

DECLARE @xml xml 

SET @xml = N' 
<?xml version="1.0" ?> 
    <POSLog xmlns="http://www.nrf-arts.org/IXRetail/namespace/" 
      xmlns:dtv="http://www.datavantagecorp.com/xstore/" 
      xmlns:cbp="http://www.datavantagecorp.com/xstore/cbp/" 
      mlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://www.nrf-arts.org/IXRetail/namespace/POSLog.xsd"> 
    <Transaction CancelFlag="false" TrainingModeFlag="false" OfflineFlag="false" dtv:AppVersion="3.4.1.9 - 8.6.0 - 0.0"> 
<RetailStoreID>2001</RetailStoreID> 
<WorkstationID>1</WorkstationID> 
<TillID>0</TillID> 
<SequenceNumber>62602</SequenceNumber> 
</Transaction> 
</POSLog>' 

;with xmlnamespaces(default 'http://www.nrf-arts.org/IXRetail/namespace/') 
SELECT doc.col.value('@CancelFlag', 'Varchar(50)') CancelFlag, 
     doc.col.value('@TrainingModeFlag', 'Varchar(50)') TrainingModeFlag, 
     doc.col.value('@OfflineFlag', 'Varchar(50)') OfflineFlag, 
     doc.col.value('@AppVersion', 'Varchar(50)') AppVersion, 
     doc.col.value('RetailStoreID[1]', 'Varchar(50)') RetailStoreID, 
     doc.col.value('WorkstationID[1]', 'Varchar(50)') WorkstationID, 
     doc.col.value('TillID[1]', 'Varchar(50)') TillID, 
     doc.col.value('SequenceNumber[1]', 'Varchar(50)') SequenceNumber 
FROM @xml.nodes('/POSLog/Transaction') doc(col) 

문제는 dtv:AppVersion의 값은 항상 널이다?

모든 제안에 대해 감사드립니다.

답변

1

xmlnamespaces 절의 네임 스페이스에 대한 참조가 필요하며 쿼리 요소의 네임 스페이스를 참조하십시오.

;with xmlnamespaces(default 'http://www.nrf-arts.org/IXRetail/namespace/', 
'http://www.datavantagecorp.com/xstore/' as dtv) 
SELECT doc.col.value('@CancelFlag', 'Varchar(50)') CancelFlag, 
     doc.col.value('@TrainingModeFlag', 'Varchar(50)') TrainingModeFlag, 
     doc.col.value('@OfflineFlag', 'Varchar(50)') OfflineFlag, 
     doc.col.value('@dtv:AppVersion', 'Varchar(50)') AppVersion, 
     doc.col.value('RetailStoreID[1]', 'Varchar(50)') RetailStoreID, 
     doc.col.value('WorkstationID[1]', 'Varchar(50)') WorkstationID, 
     doc.col.value('TillID[1]', 'Varchar(50)') TillID, 
     doc.col.value('SequenceNumber[1]', 'Varchar(50)') SequenceNumber 
FROM @xml.nodes('/POSLog/Transaction') doc(col) 
+0

답장을 보내 주셔서 감사합니다. 나는 그렇게하려고 노력했지만 값은 항상 null입니다 ... – user2791492

+0

죄송합니다 : 코드와 함께 오류를 입력했습니다. 그것은 작동! 매우 감사합니다 !! – user2791492

관련 문제