2011-04-20 63 views
0

這裏提取他們在SQL(SQL Server 2008中)上XQuerying問題而從XML數據的SQL Server

最初如何修改值,我有一個XML,我需要需要輸出有所不同,對於參考:

declare @XMLNODE table (id int identity, doc xml) 
insert @XMLNODE (doc) values ( 
' 
<Root> 
    <Elements> 
     <Items> 
     <OldItem> 

      <ID>1</ID> 
      <Show Pointer="yes" /> 
      <Display Pointer="Display"> 
      <Detail1>some Details</Detail1> 
      </DisplayDetails> 

     </OldItem> 
     </Items> 
    </Elements> 
    </Root>' 
) 

    SELECT a.value('(ID)[1]','int') as ID, 
    a.value('(Show/@Pointer)[1]', 'varchar(5)') AS ShowItem, 
    a.value('Display[1]/@Pointer[1]="Display"', 'varchar(10)') as DisplayDetails, -- Set to 'true' or 'false' 
    a.value('DisplayDetails[1][@Pointer[1]="Display"]/Detail1[1]', 'varchar(max)') as Detail1 
    FROM @XMLNODE t 
    cross apply 
    t.doc.nodes('//OldItem') x(a) 
    FOR XML PATH ('Items'), 
    ROOT('Elements') 

所以,現在我有一個這樣的XML:

<Elements> 
    <Items> 
    <ID>1</ID> 
    <ShowItem>yes</ShowItem> 
    <DisplayDetails>true</DisplayDetails> 
    <Detail1>some Details</Detail1> 
    </Items> 
</Elements> 

想添加一些修改此爲1或沒有價值的基礎上,如果這是真的/是等

即期望:

<Elements> 
    <Items> 
    <ID>1</ID> 
    <ShowItem>1</ShowItem> 
    <DisplayDetails>1</DisplayDetails> 
    <Detail1>some Details</Detail1> 
    </Items> 
</Elements> 

另外,如果<DisplayDetails>false</DisplayDetails>我只是想更新到<DisplayDetails />

有沒有辦法直接比較查詢中的輸入(例如,是或否)並將其設置爲1或0而不是真或假?我正在使用.query來使用這些值並根據需要添加其他信息。

回答

0

我不從SQL中很好地查詢XML,但是如果我爲非XML的任何事情做這件事,我會做這樣的事情在SELECT語句:

SELECT a.value('(ID)[1]','int') as ID, 
case 
    when a.value('(Show/@Pointer)[1]', 'varchar(5)') = 'yes' then '1' 
    else '0' 
End case as 'ShowItem', 
a.value('Display[1]/@Pointer[1]="Display"', 'varchar(10)') as DisplayDetails, -- Set to 'true' or 'false' 
a.value('DisplayDetails[1][@Pointer[1]="Display"]/Detail1[1]', 'varchar(max)') as Detail1 
FROM @XMLNODE t 
cross apply 
t.doc.nodes('//OldItem') x(a) 

注:這還沒有嘗試過,而且我不是一個DB客戶端上,以確保我的語法是完全正確的。但是,檢查數據庫中的值並根據該值顯示其他值是相對直接的。

+0

謝謝,我會嘗試根據需要嘗試修復它,如果我們可以在查詢SQL XML數據時在.query()中進行這種比較檢查,有什麼想法嗎?因爲我可以遍歷這些值,直接添加更多的XML數據等,只是不知道如何修改.query()中的XML ...... – 2011-04-20 16:29:07

+0

就像我說的,我不查詢SQL XML非常很多,所以我對此有種限制。如果你遇到另一個問題,我只是在這個問題上添加評論,或者對你需要的具體信息提出不同的問題。 – AllenG 2011-04-20 16:38:32