我知道 NTEXT 正在消失,并且这里存在更大的最佳实践问题(例如将 XML 存储在 NTEXT 列中),但我有一个包含 XML 的表,我需要从中提取一个属性值。使用 sp_xml_preparedocument 应该很容易做到这一点,但由于您无法声明 NTEXT 类型的局部变量并且我无法弄清楚如何使用表达式来指定传递给函数的 XML 文本,这一点变得更加棘手。由于 XML 或 VARCHAR(MAX) 数据类型,我可以在 SQL 2005 中这样做,但我可以为 SQL 2000 做什么?
DECLARE @XmlHandle int
DECLARE @ProfileXml xml
SELECT @ProfileXml = ProfileXml FROM ImportProfile WHERE ProfileId = 1
EXEC sp_xml_preparedocument @XmlHandle output, @ProfileXml
-- Pluck the Folder TemplateId out of the FldTemplateId XML attribute.
SELECT FolderTemplateId
FROM OPENXML( @XmlHandle, '/ImportProfile', 1)
WITH(
FolderTemplateId int '@FldTemplateId' )
EXEC sp_xml_removedocument @XmlHandle
对于 SQL 2000,我唯一能想到的就是使用 varchar(8000)。真的没有办法使用像下面这样的表达式吗?
EXEC sp_xml_preparedocument @XmlHandle output, (SELECT ProfileXml FROM ImportProfile WHERE ProfileId = 1)