OPENXML T-SQL无法按预期工作

时间:2012-05-30 02:37:50

标签: sql sql-server tsql openxml

我正在编写一个采用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 issue

我似乎无法弄清问题是什么。我期待1和2将在临时表中,但正如你所看到的,我只有1.现在,我呼吁StackOverflow的力量。用你的智慧祝福我!

1 个答案:

答案 0 :(得分: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_preparedocumentsp_xml_removedocument - 只需运行即可!

相关问题