2011-02-15 146 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

相關問題