Я знаю, что NTEXT уходит и что здесь есть более серьезные проблемы с лучшими практиками (например, хранение XML в столбце NTEXT), но у меня есть таблица, содержащая 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)