2011-02-15 149 views
0

我将序列化集合(XML)传递给存储过程。我的XML结构是 -如何从XML中获取数据并更新数据库表

<ArrayofDepartmentEntity> 
    <Department> 
    <id>1004</id> 
    <budget>2500.oo</budget> 
    </Department> 
    <Department> 
    <id>1080</id> 
    <budget>3500.oo</budget> 
    </Department> 
    <Department> 
    <id>1029</id> 
    <budget>4500.00</budget> 
    </Department> 
</ArrayofDepartmentEntity> 

如何更新相应的地方部门ID是在上面的XML预算列?可以任何人写下sql语法。

我的SP syntax-

ALTER PROCEDURE [dbo].[usp_SaveDepartentBudget] (     
@departmentBudgetXML ntext = NULL     
)       
AS       
BEGIN 
DECLARE @ptrHandle int  
EXEC sp_xml_preparedocument @ptrHandle OUTPUT, @departmentBudgetXML 
....Here I want to update Budget foreach departmentID in @departmentBudgetXML 
+0

如果它的XML - 那你为什么让你的存储过程中参数的`NTEXT`? `NTEXT`已被弃用 - 不要再使用它了!改用`NVARCHAR(MAX)`。如果它是XML - 使用`XML`! – 2011-02-15 08:02:02

回答

0

试试这个代码。

DECLARE @XMLString XML 
SET @XMLString = '<ArrayofDepartmentEntity> 
    <Department> 
    <id>1004</id> 
    <budget>2500.oo</budget> 
    </Department> 
    <Department> 
    <id>1080</id> 
    <budget>3500.oo</budget> 
    </Department> 
    <Department> 
    <id>1029</id> 
    <budget>4500.00</budget> 
    </Department> 
</ArrayofDepartmentEntity>' 
SELECT 
Department.col.value('id[1]','VARCHAR(20)')AS Id, 
Department.col.value('budget[1]','VARCHAR(20)')AS Budget 
FROM @XMLString.nodes('//Department') Department(col) 

编辑:这里是代码更新

UPDATE tblInfo SET Budget = Department.col.value('budget[1]','MONEY') 
FROM @XMLString.nodes('//Department') Department(col) 
WHERE tblInfo.Id = Department.col.value('id[1]','INT') 
+0

它返回一个列ID和预算表。我曾尝试过,但如何创建更新查询foreach`ID`。 `更新tblBudget SET预算=预算[1] WHERE Depid = id [1]`这样的事情。 – ppp 2011-02-15 07:58:25

相关问题