2015-09-28 62 views
-1

我有XML字符串是這樣的:基於主鍵SQL Server上如何更新XML數據轉換表

<?xml version="1.0"?> 
<ArrayOfSpokenLanuageInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <SpokenLanuageInfo> 
     <UserID>18</UserID> 
     <LanguageId>8</LanguageId> 
     <Language>Basque</Language> 
    </SpokenLanuageInfo> 
    <SpokenLanuageInfo> 
     <UserID>45</UserID> 
     <LanguageId>21</LanguageId> 
     <Language>Corsican</Language> 
    </SpokenLanuageInfo> 
    <SpokenLanuageInfo> 
     <LanguageId>27</LanguageId> 
     <Language>Esperanto</Language> 
    </SpokenLanuageInfo> 
</ArrayOfSpokenLanuageInfo> 

LanguageId int 
Language Varchar(50) 
UserID INT 
+0

好,那麼**什麼是**表中的主鍵?你如何獲得這個XML - 作爲一個SQL變量?你想完全用它做什麼?你不是很清楚你的任務是什麼..... –

+0

** **錯字所有在你的XML:這是一個** **語言 - 不是「lanuage」 .... –

+0

我需要更新我的基於用戶ID的表格 –

回答

1

假設你有這個XML中的SQL變量稱爲@input(假設你已經解決了「lanuage」到「語言」正確的拼寫都在你的XML),那麼你可以使用這樣的提取信息:

;WITH XmlData AS 
(
    SELECT 
     UserId = XC.value('(UserID)[1]', 'int'), 
     LanguageId = XC.value('(LanguageId)[1]', 'int'), 
     [Language] = XC.value('(Language)[1]', 'varchar(50)') 
    FROM 
     @input.nodes('/ArrayOfSpokenLanguageInfo/SpokenLanguageInfo') AS XT(XC) 
) 
SELECT * 
FROM XmlData 

這給你的輸出是這樣的:

enter image description here

更新:如果要插入只有新的項目,只有那些確實有UserId,你可以使用像這個:

;WITH XmlData AS 
(
    SELECT 
     UserId = XC.value('(UserID)[1]', 'int'), 
     LanguageId = XC.value('(LanguageId)[1]', 'int'), 
     [Language] = XC.value('(Language)[1]', 'varchar(50)') 
    FROM 
     @input.nodes('/ArrayOfSpokenLanguageInfo/SpokenLanguageInfo') AS XT(XC) 
) 
INSERT INTO dbo.YourTable(UserId, LanguageId, [Language]) 
    SELECT  
     x.UserId, x.LanguageId, x.[Language] 
    FROM 
     XmlData x 
    WHERE 
     x.UserId IS NOT NULL 
     AND NOT EXISTS (SELECT * FROM dbo.YourTable tbl 
         WHERE tbl.UserId = x.UserId) 
+0

如何更新XML數據使用存儲過程 –

+0

@MuthuSamy SQL Server 2008中:你只要把這個代碼,我到存儲過程中提供.....不應該*硬* ..... –

+0

確定,但我想新的項目插入到表中的現有項目更新的行怎麼做 –

相關問題