2011-07-26 86 views
0
declare @x xml 
set @x = '<Root> 
      <row id="1"><name>Larry</name><oflw>some text</oflw></row> 
      <row id = "2"><name>moe</name></row> 
      <row id = "3"/> 
      </Root>' 
select T.c.query(..) as result from @x.nodes('/Root/row') T(C) 

select T.c.query(..) as result from @x.nodes('/Root/row') T(C) 

我收到以下錯誤。使用XML數據類型時出錯

Msg 102, Level 15, State 1, Line 1 
Incorrect syntax near ')'. 

任何人都可以幫助我糾正錯誤。我是新來的sql。

+1

什麼是實際的錯誤? – gbn

+0

@gbn:我編輯了問題。請現在通過。 – Shine

回答

1

應該一個這樣的:

select T.c.query('..') as result from @x.nodes('/Root/row') T(C) 

也許

select T.c.query('.') as result from @x.nodes('/Root/row') T(C) 

path參數爲query方法應該是一個字符串

0

不知道什麼你想從XML中提取 - 但試試這個查詢 - 它會「分解」存儲在XML中的所有信息位,並將它們顯示爲sep arate值:

declare @x xml 
set @x = '<Root> 
      <row id="1"><name>Larry</name><oflw>some text</oflw></row> 
      <row id="2"><name>moe</name></row> 
      <row id="3"/> 
      </Root>' 

select 
    T.c.value('@id', 'int') as 'ID', 
    T.c.value('(name)[1]', 'varchar(25)') as result, 
    T.c.value('(oflw)[1]', 'varchar(25)') as 'OFlw' 
from @x.nodes('/Root/row') T(C) 

輸出:

ID result OFlw 
1 Larry some text 
2 moe  NULL 
3 NULL NULL 
+0

非常感謝。我知道如何使用value()方法。 – Shine

+0

可以請你解釋我使用節點()。 – Shine

+0

它根據提供的XPath創建XML節點的「內存中」列表/僞表,這裏創建了「」父節點中所有「」節點的列表。然後,您可以使用它們從每個節點中獲取單個值,就好像它是一個包含XML值的表格一樣 –