1

我正在编写一个采用 Xml 的存储过程,但是解析 Xml 的部分工作不正常。这是存储过程:

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 回答