ranio Ответов: 2

Почему я получаю ошибку в Столбцах с типом данных XML в SQL linked server?


Я получаю исключение из того, что делаю архивирование данных через связанный сервер в Sql. Я использую динамический скрипт, в котором я извлекаю данные из живой БД в архивную БД.
Исключение составляют столбцы типа данных Xml.
Тип данных Xml не поддерживается в распределенных запросах. Удаленный объект 'LNK_228.FTS_DIB_ARCH2.dbo.CustomerDetails' имеет xml-столбцы.

INSERT INTO [LNK_228].[FTS_DIB_ARCH2].dbo.CustomerDetails(CustomerDetailID,CustomerId,AccountNo,CustomerName,convert(varchar(max),EmailIds),IsActive,IsDeleted,CreatedBy,CreatedDate,ModifiedBy,ModifiedDate)                  
			SELECT CustomerDetailID,CustomerId,AccountNo,CustomerName,convert(varchar(max),EmailIds),IsActive,IsDeleted,CreatedBy,CreatedDate,ModifiedBy,ModifiedDate FROM  FTS_DIB_ARCH_TEST .dbo.CustomerDetails


Что я уже пробовал:

Запрос, напечатанный из динамического скрипта
Вставить в [LNK_228].[FTS_DIB_ARCH2].dbo.CustomerDetails(CustomerDetailID,CustomerId,AccountNo,CustomerName,EmailIds,IsActive,IsDeleted,CreatedBy,CreatedDate,ModifiedBy,ModifiedDate)
ВЫБИРАТЬ
CustomerDetailID,
атрибут CustomerID,
AccountNo,
CustomerName,
Конвертировать(VARCHAR(3000),EmailIds)
,Метод isactive,IsDeleted,обработки,CreatedDate,поле modifiedby и modifieddate от FTS_DIB_ARCH_TEST .ДБО.CustomerDetails

2 Ответов

Рейтинг:
1

Member 14473678

Извините за поздний ответ, но если вы приведете столбцы XML как другой тип данных в Openquery, он должен работать.

Asuming EmailIDs быть столбцом XML, что - то вроде следующего должно работать:

INSERT INTO OPENQUERY([LNK_228], 'SELECT CustomerDetailID, CustomerId, AccountNo, CustomerName, CAST(EmailIds AS VARCHAR(MAX)) AS EmailIds2, IsActive, IsDeleted, CreatedBy, CreatedDate, ModifiedBy, ModifiedDate FROM [FTS_DIB_ARCH2].dbo.CustomerDetails')
SELECT CustomerDetailID, CustomerId, AccountNo, CustomerName, EmailIds2, IsActive, IsDeleted, CreatedBy, CreatedDate, ModifiedBy, ModifiedDate 
FROM FTS_DIB_ARCH_TEST.dbo.CustomerDetails


Рейтинг:
1

Richard Deeming

Сообщение об ошибке довольно ясно - столбцы XML не поддерживаются в распределенных запросах:

Таблицы, содержащие столбцы xml, не могут быть запрошены, даже если запрос обращается к столбцам таблицы, не являющимся столбцами xml.

Это было сообщено Microsoft как ошибка по крайней мере дважды, но нет никаких признаков того, что она когда-либо будет исправлена:

Есть два обходных пути, предложенных в это так нить[^]:
  • Создайте представление на удаленном сервере без столбцов XML и запросите его;
    (Не так уж много пользы, если вам нужно запросить столбцы XML!)
  • Воспользуйся Функция openquery[^] для запроса удаленной таблицы.


Я еще не пробовал, но документация говорит о том, что что-то вроде этого должно сработать:
INSERT INTO OPENQUERY([LNK_228], 'SELECT CustomerDetailID, CustomerId, AccountNo, CustomerName, EmailIds, IsActive, IsDeleted, CreatedBy, CreatedDate, ModifiedBy, ModifiedDate FROM [FTS_DIB_ARCH2].dbo.CustomerDetails')
SELECT CustomerDetailID, CustomerId, AccountNo, CustomerName, EmailIds, IsActive, IsDeleted, CreatedBy, CreatedDate, ModifiedBy, ModifiedDate 
FROM FTS_DIB_ARCH_TEST.dbo.CustomerDetails


ranio

sill исключение типа данных Xml не поддерживается в распределенных запросах. Удаленный объект 'OPENQUERY' имеет xml-столбец(Ы), который будет выполняться выше сценария