0

我正在将 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. select * from #tData 是空表。为什么没有填充数据?
  2. Sp_xml_preparedocument 有什么作用?当我打印@TestDoc 时,它给了我一个数字
  3. 什么是 Sp_xml_removedocument ?
4

1 回答 1

0

回答你的问题。

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

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

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

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

于 2019-05-28T15:40:07.650 回答