1

Xmlを使用するストアドプロシージャを作成していますが、Xmlを解析する部分が正しく機能していません。sprocは次のとおりです。

CREATE PROCEDURE [dbo].[SprocName]
    @Xml TEXT
AS

DECLARE @XmlHandle INT

DECLARE @Table TABLE
(
    Id INT
)

-- Process the xml for use
EXEC sp_xml_preparedocument @XmlHandle OUTPUT, @Xml

INSERT @Table 
SELECT 
    Id
FROM 
OPENXML(@XmlHandle, 'Ids', 2) 
WITH 
(
    Id INT
)

SELECT * FROM @Table

EXEC sp_xml_removedocument @XmlHandle

そして、呼び出しコードと結果:

OPENXMLの問題

何が問題なのかわからないようです。1と2が一時テーブルに含まれることを期待していますが、ご覧のとおり、私には1つしかありません。ここで、StackOverflowのパワーを呼びかけます。あなたの知恵で私を祝福してください!!!

4

1 に答える 1

2

可能であれば、OPENXMLのものは避けてください-それは古く、ぎこちなく、メモリをむさぼり食います...

SQL Server 2005以降に組み込まれているネイティブXQueryサポートを使用します。これにより、次のようなことが非常に簡単に実行できます。

DECLARE @Table TABLE (Id INT)

DECLARE @Input XML = '<Ids><Id>1</Id><Id>2</Id></Ids>'

INSERT INTO @Table(Id)
    SELECT
        IdNode.value('(.)[1]', 'int')
    FROM
        @input.nodes('/Ids/Id') AS IdTbl(IdNode)

SELECT * FROM @Table

それは1, 2からの出力としてあなたを与えます@table。電話する必要はなく、sp_xml_preparedocument実行sp_xml_removedocumentするだけです。

于 2012-05-30T05:03:35.317 に答える