如何在SQL 2000中对NTEXT查询的结果使用sp_xml_preparedocument?

时间:2009-04-09 18:23:24

标签: sql-server xml sql-server-2000 types sqlxml

我知道NTEXT正在消失,这里有更大的最佳实践问题(比如在NTEXT列中存储XML),但我有一个包含XML的表,我需要从中获取属性值。这应该很容易使用sp_xml_preparedocument,但由于你不能声明类型为NTEXT的局部变量而我无法弄清楚如何使用表达式来指定传递给函数的XML文本,因此更加棘手。我可以在SQL 2005中这样做,因为XML或VARCHAR(MAX)数据类型,但我能为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)

1 个答案:

答案 0 :(得分:6)

很好的问题..但没有解决方案

思想:

  • 您无法将SELECT调用包装在UDF中(以创建一种虚拟ntext local var)
  • 您无法将sp_xml_preparedocument调用包装在标量UDF中(在SELECT中使用),因为您无法调用扩展存储过程
  • 您无法连接一个动态运行的调用,因为您将遇到字符串限制和scop问题
  • 使用OPENQUERY
  • 同时进行自助通话
  • textptr + READTEXT无法作为参数添加到sp_xml_preparedocument

那么为什么sp_xml_preparedocument将ntext作为数据类型?