Stored procedures 有人能解释一下OpenXML(在这个SP中)是如何工作的吗?

Stored procedures 有人能解释一下OpenXML(在这个SP中)是如何工作的吗?,stored-procedures,openxml,Stored Procedures,Openxml,我正在看这个教程 这让我很困惑,因为我没有得到SP CREATE PROCEDURE [dbo].[spTEST_InsertXMLTEST_TEST](@UpdatedProdData nText) AS DECLARE @hDoc int exec sp_xml_preparedocument @hDoc OUTPUT,@UpdatedProdData INSERT INTO TBL_TEST_TEST(NAME) SELECT XMLProdTable.NAME

我正在看这个教程

这让我很困惑,因为我没有得到SP

CREATE PROCEDURE [dbo].[spTEST_InsertXMLTEST_TEST](@UpdatedProdData nText)
AS 
 DECLARE @hDoc int   

 exec sp_xml_preparedocument @hDoc OUTPUT,@UpdatedProdData 

 INSERT INTO TBL_TEST_TEST(NAME)
 SELECT XMLProdTable.NAME
    FROM OPENXML(@hDoc, 'ArrayOfTBL_TEST_TEST/TBL_TEST_TEST', 2)   
       WITH (
                ID Int,                 
                NAME varchar(100)
            ) XMLProdTable

EXEC sp_xml_removedocument @hDoc
首先,我使用的是SQL2005,我是否需要在服务器上安装一些东西才能使OPENXML正常工作?接下来我不明白这些陈述是怎么做的

// not sure what @hDoc is for and why it is an int
 DECLARE @hDoc int   

 // don't get what this is and where the output is.
 exec sp_xml_preparedocument @hDoc OUTPUT,@UpdatedProdData 

// don't get why it is "XMLProdTable" and if it always has to be like this
 SELECT XMLProdTable.NAME

// pretty muct don't get anything what is happening after OPENXML
 FROM OPENXML(@hDoc, 'ArrayOfTBL_TEST_TEST/TBL_TEST_TEST', 2)   
           WITH (
                    ID Int,                 
                    NAME varchar(100)
                ) XMLProdTable

// Don't know what this is really executing
EXEC sp_xml_removedocument @hDoc
谢谢

//不确定@hDoc的用途和原因 它是一个int声明@hDoc int

将在下一次调用中使用,它是一个输出参数

//不知道这是什么,在哪里 输出为。执行官 sp_xml_preparedocument@hDoc 输出@UpdatedProdData

它正在调用sp_xml_preparedocument,output只是表示它是一个输出参数,@hDoc将在proc中填充该值

//不明白为什么它是“XMLProdTable” 如果总是这样的话 选择XMLProdTable.NAME

XMLProdTable是下一部分中使用的别名,CTE名为XMLProdTable

//相当多我什么都没得到什么什么 是在来自的OPENXML之后发生的 OPENXML(@hDoc, “ArrayOfTBL_测试/TBL_测试”, 2)
与( ID Int,
名称varchar(100) )XMLProdTable——别名

它使用ArrayOfTBL_TEST_TEST/TBL_TEST_TEST标记下的XML文档中的值填充CTE

//我不知道这到底是什么 执行EXEC sp_xml_removedocument @hDoc

这将从内存中释放文档


看看这里的样本

那么,这个数组的BL_测试/TBL_测试标签是什么?比如我在哪里换?它是如何设置的?选择XMLProdTable.NAME如何?我是否需要为表中的每一列(如XMLProdTable.NAME、XMLProdTable.QTY等)都添加一个名称?如果您使用SQL Server 2005本机XQuery支持(@xml.query()、@xml.nodes()、@xml.value()等),那么实际上不需要所有这些内容