2011-02-15 15 views
0

シリアル化されたコレクション(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であり、対応する予算の列を更新することができますが - 私のXML構造??は、どのような本体でもSQL構文を書き留めることができます。

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

を更新するためのコードである - そして、なぜあなたはあなたのストアドプロシージャのパラメータ 'NTEXT'を作るのですが? 'NTEXT'は廃止されました - もう使用しないでください!代わりに 'NVARCHAR(MAX)'を使用してください。 XMLなら 'XML'を使う! –

答えて

0

syntax-

私のSPは、このコードを試してみてください。

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) 

EDIT:ここでは、それはXMLなら

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'を更新クエリを作成するのですか? 'Update tblBudget SET Budget = budget [1] WHERE Depid = id [1]'このようなものです。 – ppp

+0

パフォーマンス上の理由から、 '.nodes( 'Department')'は避けるようにしてください - これは最悪のXPathです....代わりに '.nodes( '/ ArrayofDepartmentEntity/Department')'を使用してください。 –

+0

@ppp:これを行う直接的な方法は不明ですが、select into文を実行して内容をテーブルに更新することができます。 @marc_s:共有ありがとう:) – Anuraj

関連する問題