Невозможно передать TEXT в XML в SQL Server

В основном у меня есть столбец с именем XML который имеет тип TEXT ; это не может быть изменено по другой причине, но мне было интересно, как я могу применить его к XML.

Это дает мне ошибку

Разбор XML: строка 1, символ 39, неспособная переключить кодировку

при попытке сделать это. Есть ли все-таки вокруг него, чтобы все еще отформатировать его в XML? Я действительно застрял в этом вопросе.

Данные в столбце:

 <?xml version="1.0" encoding="utf-16"?> <Record> <UserGuid>c624a356-9f18-403c-b404-790e79034c7d</UserGuid> </Record> 

Вот приведенный код SQL:

 SELECT CAST(XML AS XML).value('(/Record/UserGuid)[1]', 'NVARCHAR(max)') FROM tbl_Module_RequestForms_Items 

Ваша проблема: у вас есть XML с encoding="utf-16" , но ваш столбец не является столбцом Unicode ……

Предполагая, что вы также не можете изменить его на NTEXT , вам нужно сделать два вложенных CAST для достижения того, что вы ищете:

 SELECT CAST(CAST(XML AS NTEXT) AS XML).value('(/Record/UserGuid)[1]', 'NVARCHAR(max)') FROM tbl_Module_RequestForms_Items 

Во-первых, вам нужно NVARCHAR(MAX) в NTEXT (или NVARCHAR(MAX) ), а затем вы должны NVARCHAR(MAX) этот результат в XML , прежде чем сможете его использовать.

Совет: удалите эти «другие причины» и преобразуйте их в тип данных XML если вам действительно нужно использовать его как XML …..

Вы должны заменить encoding="utf-16" на encoding="utf-8" или ''(blank) а затем выполнить свою операцию.

а. Преобразование encoding="utf-16" в encoding="utf-8"

 SELECT CAST( REPLACE(CAST([xml] AS VARCHAR(MAX)), 'encoding="utf-16"', 'encoding="utf-8"') AS XML).value('(/Record//UserGuid/node())[1]', 'NVARCHAR(max)') as UserGuid from tbl_Module_RequestForms_Items 

б. Замена encoding="utf-16" на ''(blank)

 SELECT CAST( REPLACE(CAST([xml] AS VARCHAR(MAX)), 'encoding="utf-16"', '') AS XML).value('(/Record//UserGuid/node())[1]', 'NVARCHAR(max)') as UserGuid from tbl_Module_RequestForms_Items 

Перемещение XML-переменной в NTEXT решает проблему CAST(CAST (XML AS NTEXT) AS XML) .

Вы пытались использовать CONVERT вместо CAST ?

 SELECT CONVERT(XML, @xml).value('(/Record/UserGuid)[1]', 'NVARCHAR(max)') from tbl_Module_RequestForms_Items 

Кроме того, ознакомьтесь с разделом «xml styles» этой страницы; он содержит некоторые параметры, которые вы имеете при преобразовании xml:

http://msdn.microsoft.com/en-us/library/ms187928.aspx

  • Аргумент 1 метода «узлы» типа данных XML должен быть строковым литералом
  • XML-данные в типе данных ntext-xml
  • Поиск столбца XML для значения / строки
  • Помощь по созданию базы данных с различными схемами
  • Обновление с использованием XML в SQL Server
  • Проектирование таблицы для хранения данных XML в SQL Server 2008 R2
  • Управление вложением XML-элементов с использованием FOR XML
  • Как вставить элемент после корневого узла в несколько xml-выход через FOR XML на SQL-сервере
  • Удаление узлов с определенным значением из XML с помощью TSQL
  • Создание единого XML-запроса из нескольких таблиц SQL Server
  • SQL-Server XML-Bulk-Импорт и чтение в виде табличных данных
  • Interesting Posts

    Таблица SQL Server с записями 100 тыс., 2 внутренних соединения – чрезвычайно медленно

    Ошибка входа в Perl DBI: SQL Server не существует или доступ запрещен

    Как связать поле в динамическом SQL-запросе?

    Как преобразовать SQL Left Join запрос в Linq to Entity в C #?

    SQL Server 2005 Express – Монитор активности – Показать детали пуст, как я могу узнать, что такое инструкция SQL, которая начала процесс?

    Как интерпретировать это сообщение об ошибке SQL Server

    заполнение переменной sql с помощью оператора select работает, но если я поместил этот же оператор в переменную и попробую exec (), он не работает

    Оператор C # sql вроде не работает

    Имеет ли NULL тип данных?

    SQL Server – вытащить X случайных записей на каждое состояние

    Как решить предупреждение «Ссылочная сборка нацелена на другой процессор, чем приложение»

    Двоичный оператор ИЛИ в TSQL?

    Кластерный индекс против некластеризованного индекса, включая ВСЕ столбцы (SQL Server)

    localhost не может найти хранимую процедуру 'dbo.aspnet_CheckSchemaVersion'

    SQL Server: сумма выписки по делу

    Давайте будем гением компьютера.