Обязательно проверьте файлы machine.config в обоих местах
C: \ Windows \ Microsoft.NET \ Framework [версия] \ Конфигурация C: \ Windows \ Microsoft.NET \ Framework64 [версия] \ Config
Я узнал, что попытался использовать все решения на этой странице.
Похоже, вы хорошо понимаете, что это не обычная проблема убеждения синтаксического анализатора в том, что передается только одна вещь value()
. Эта проблема характерна для типизированного XML , как вы заметили.
Используя Google, я нашел этот древний пост с многообещающим текстом
. Rt является частью модели данных XQuery 1.0 / XPath 2.0.
Большинство людей получают от этого. Настоящее веселье начинается, когда вы создаете примеры, используя нетипизированные выражения XML и XPath с тестом узла text (). text () прекрасно работает при использовании нетипизированного XML, но не справляется с типизированным XML с простым содержимым
blockquote>В нем говорится о SQL Books Online и рекомендациях по SQL Server 2005 XML. статья, которую я считаю , эта книга здесь . Я не искал более актуальную ссылку. Но используя то, что я нашел там, я смог решить вашу проблему: просто замените
SELECT r.o.value('(../@a)[1]','varchar(20)') FROM @x2.nodes('/r//o') r(o);
на
SELECT r.o.value('fn:string(../@a)[1]','varchar(20)') FROM @x2.nodes('/r//o') r(o);
По сути,
value()
не как получить значения типа typed-xml, но хочет строки. Итак, мы даем ему строку.