1

これは以前に回答されていると確信していますが、回答を見つけるための正しい命名法が見つかりません。

基本的に、データ型がintの2つの列を持つ非常に単純なテーブルがあります

今、私はn個のレコードをテーブルに挿入しようとしています。列の1つはXMLを介して提供されています:

<Data> 
    <DepartmentID>{x}</DepartmentID>
</Data> 

定数値@ProcedureIDとともに、変数としてストアド プロシージャに渡されます。

私は次のことをしようとしています:

EXEC sp_xml_preparedocument @Handle OUTPUT, @Tags

INSERT INTO Accounting.DepartmentProcedure
(ProcedureID,DepartmentID)
SELECT @ProcedureID,DepartmentID
FROM OPENXML(@Handle,'/Data/DepartmentID',2) WITH (DepartmentID int)

上記は問題なく解析されますが、実行すると次のエラーが発生します。

メッセージ 515、レベル 16、状態 2、行 7
値 NULL を列 'DepartmentID'、テーブル 'RCH.Accounting.DepartmentProcedure' に挿入できません。列はヌルを許可しません。INSERT は失敗します。

私の人生では、この問題に対処する方法がわかりません。

前もって感謝します

4

1 に答える 1

1

SQL Server に組み込まれている XQuery 機能を使用します。

DECLARE @input XML = '<Data> 
    <DepartmentID>{x}</DepartmentID>
</Data>'

INSERT INTO 
    dbo.Accounting.DepartmentProcedure(ProcedureID, DepartmentID)

    SELECT 
        @ProcedureID,
        @input.value('(/Data/DepartmentID)[1]', 'int') 

これにより<DepartmentID>、XML から抽出されたの値がDepartmentID列に挿入されます。

ここに移動して、SQL Server 2005 でのXQuery サポートの詳細を読むか、MSDN の SQL Server 2005 での XQuery の紹介を読んでください。

于 2012-02-26T11:19:32.693 に答える