2017-02-21 65 views
0

我是新來的,所以請耐心等待。我正試圖將一些XML數據轉移到Microsoft SQL Server中。我假設這些數據需要作爲元素而不是屬性傳輸,因爲列的內容不會是靜態的。試圖將xml數據轉換爲SQL作爲元素(非屬性)

但是,由於某些原因,當我試圖將數據作爲元素傳輸時,我得到NULL值。但是,當我嘗試將相同的數據作爲屬性進行傳輸時,它看起來應該是這樣。我很想聳聳肩,然後繼續前進,但我擔心如果我稍後在道路上這樣做,事情可能會出錯。

我已經從這個XML中獲得了一些屬性,我設法將這些屬性合併到這些僞裝成屬性的元素中。它會起作用嗎?如果它確實會在路上出現問題嗎?

這裏是我的SQL代碼時,我試圖要素轉移的要素:

SELECT * 
FROM OPENXML (@hdoc, '/roll/voter', 2) 
WITH (
id int, 
[value] char(50), 
[state] char(2)) 

這裏是我的SQL代碼時,我嘗試的元素傳遞的屬性:

SELECT * 
FROM OPENXML (@hdoc, '/roll/voter', 1) 
WITH (
id int, 
[value] char(50), 
[state] char(2)) 

這裏XML文檔的小型化版本:

<roll> 
<voter id="400048" value="Yea" state="FL" /> 
<voter id="412516" value="Yea" state="CA" /> 
</roll> 

這裏是一個鏈接到xml d通過谷歌驅動器(非常小的XML)ocument:https://drive.google.com/open?id=0B5VgOwWcGeLHaWctRU56Qlk3UWM

A screenshot of my SQL query, the table results, and the XML

+0

不知道你想達到什麼,但第一個正確的語法是'FROM OPENXML(@hdoc,'/ roll/voter',2)WITH(id int'@id',[value] char(50)'@value',[state] char(2)'@state')'或者類似的東西。 – ZLK

+0

@ZLK 使用別名我能夠使元素工作的傳輸。是否需要別名來使元素工作,但不需要屬性? –

+0

我不確定我明白爲什麼別名是第一個查詢所必需的。 –

回答

1

FROM OPENXML已經過時,不應該再使用(除了極少數例外存在)...

真正的XML方法嘗試:

DECLARE @xml XML= 
N'<roll> 
<voter id="400048" value="Yea" state="FL" /> 
<voter id="412516" value="Yea" state="CA" /> 
</roll>'; 

SELECT @xml.value(N'(/roll/voter/@id)[1]',N'int') AS voter_id 
     ,@xml.value(N'(/roll/voter/@value)[1]',N'nvarchar(max)') AS voter_value 
     ,@xml.value(N'(/roll/voter/@state)[1]',N'nvarchar(max)') AS voter_state 

結果

voter_id voter_value voter_state 
400048  Yea   FL