2015-09-28 55 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

确定,但我想新的项目插入到表中的现有项目更新的行怎么做 –

相关问题