如果我有 XML 类型的 SQL 变量,则可以直接将其用作 SELECT 子句的列(即使该值是没有单个根元素的 XML 片段)
DECLARE @Items XML
SET @Items = '<item>one</item><item>two</item>'
SELECT @Items
然而,当我使用该函数以任何方式分解该 XML 变量时nodes(),SQL Server 抱怨说
SELECT Items.Item FROM @Items.nodes('/') AS Items (Item)
-- The column 'Item' that was returned from the nodes() method cannot be used directly. It can only be used with one of the four XML data type methods, exist(), nodes(), query(), and value(), or in IS NULL and IS NOT NULL checks.
当我按照错误消息中包含的提示进行操作时,这很好
SELECT Items.Item.query('.') FROM @Items.nodes('/') AS Items (Item)
SELECT Items.Item.query('.') FROM @Items.nodes('//item') AS Items (Item)
但如果不使用其中一种“XML 数据类型”方法,我什至无法将结果转换回 XML。
SELECT CAST(Items.Item AS XML) FROM @Items.nodes('/') AS Items (Item)
-- The column that was returned from the nodes() method cannot be converted to the data type xml. It can only be used with one of the four XML data type methods, exist(), nodes(), query(), and value(), or in IS NULL and IS NOT NULL checks.
该列的数据类型是什么Items.Item,为什么我不能在不涉及其他方法的情况下将其用作 XML(当显然可以直接选择 XML 数据类型的列时?)

