Как я могу использовать sp_xml_preparedocument для результата запроса NTEXT в SQL 2000? - PullRequest
5 голосов
/ 09 апреля 2009

Я знаю, что 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)

1 Ответ

6 голосов
/ 09 апреля 2009

Отличный вопрос .. но нет решения

Мысль:

  • Вы не можете обернуть вызов SELECT в UDF (для создания своего рода фиктивного локального текста)
  • Вы не можете обернуть вызов sp_xml_preparedocument в скалярный UDF (для использования в SELECT), потому что вы не можете вызывать расширенные хранимые процедуры
  • Вы не можете объединить вызов для динамического выполнения, потому что вы достигнете ограничений строки и проблем с областью действия
  • То же самое можно сделать с помощью OPENQUERY
  • textptr + READTEXT нельзя добавить в качестве параметра в sp_xml_preparedocument

Так почему sp_xml_preparedocument принимает ntext как тип данных?

...