如何在 SQL 2000 中对 NTEXT 查询的结果使用 sp_xml_preparedocument?
我知道 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)
I know NTEXT is going away and that there are larger best-practices issues here (like storing XML in an NTEXT column), but I have a table containing XML from which I need to pluck a attribute value. This should be easy to do using sp_xml_preparedocument but is made more tricky by the fact that you cannot declare a local variable of type NTEXT and I cannot figure out how to use an expression to specify the XML text passed to the function. I can do it like this in SQL 2005 because of the XML or VARCHAR(MAX) datatypes, but what can I do for 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
The only thing I can come up with for SQL 2000 is to use varchar(8000). Is there really no way to use an expression like the following?
EXEC sp_xml_preparedocument @XmlHandle output, (SELECT ProfileXml FROM ImportProfile WHERE ProfileId = 1)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
很好的问题..但没有解决方案
想法:
sp_xml_preparedocument
调用包装在标量 UDF 中(在 SELECT 中使用)因为您无法调用扩展存储过程sp_xml_preparedocument
的参数那么为什么
sp_xml_preparedocument
采用 ntext 作为数据类型呢?Great question.. but no solution
Thoughts:
sp_xml_preparedocument
call in a scalar UDF (to use in SELECT) because you can't call extended stored procssp_xml_preparedocument
So why does
sp_xml_preparedocument
take ntext as a datatype?