来自XML的数据填充问题

时间:2019-05-28 15:27:20

标签: sql sql-server

我正在将数据从XML读取到表中。当我从表中选择时,表为空。

SET @INPUTXML = CAST(@Attribute AS XML)
EXEC Sp_xml_preparedocument @TestDoc OUTPUT, @INPUTXML

SELECT Row_Number() OVER (ORDER BY Name) AS Row, *
INTO #tData
FROM OPENXML(@TestDoc, N'/DocumentElement/dtData') 
WITH (
        ID VARCHAR(100) './ID'
        , Name VARCHAR(100) './Name'
        , Value VARCHAR(max) './Value'
        , Column VARCHAR(100) './Column'
)

EXEC Sp_xml_removedocument @TestDoc

以下是我的问题:

  1. 从* tdata中选择*是空表。为什么没有填充数据?
  2. Sp_xml_preparedocument做什么?当我打印@TestDoc时,它会给我一个数字
  3. 什么是Sp_xml_removedocument?

1 个答案:

答案 0 :(得分:0)

不过要回答您的问题。

  1. #tData为空,因为您的SELECT语句未返回任何数据。即使SELECT...INTO不返回任何行,一条SELECT语句仍将创建该表。我们无法说出您的SELECT为什么不返回数据的原因,因为我们没有示例数据。如果删除INTO子句,您将看到不返回任何行,因此需要修复SELECTFROM等,但这很快就会在我的声明中出现(关于使用XQUERY)
  2. sp_xml_preparedocument (Transact-SQL)解释得比我更好。但实际上,您不应该再使用它了,因为它是在SQL Server 2000(也许是2005年)及更早版本中用于读取XML的。当然,SQL Server 2008支持XQUERY,如果正在使用SSMS 2014,则必须至少使用XQUERY。不过,要引用文档的开头声明:
      

    读取作为输入提供的XML文本,使用MSXML解析器(Msxmlsql.dll)解析文本,并以准备好使用的状态提供已解析的文档。该解析的文档是XML文档中各个节点的树形表示:元素,属性,文本,注释等。

  3. sp_xml_removedocument (Transact-SQL),但同样,您应该使用XQUERY。
      

    删除文档句柄指定的XML文档的内部表示,并使文档句柄无效。