Запрос базы данных SQL Azure к внешней базе данных SQL Azure - PPDwManagedToNativeInteropException

У меня есть один сервер Azure SQL, на котором у меня есть несколько баз данных. Мне нужно иметь возможность запрашивать эти базы данных, и на данный момент я решаю эту проблему с помощью внешних таблиц. Проблема с этим решением заключается в том, что внешние таблицы не поддерживают все те же типы данных, что и обычные таблицы.

Согласно следующей статье, решение несовместимых типов данных заключается в использовании других похожих во внешней таблице. https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-data-types#unsupported-data-types.

DDL для таблицы в DB1

CREATE TABLE [dbo].[ActivityList](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Registered] [datetime] NULL,
    [RegisteredBy] [varchar](50) NULL,
    [Name] [varchar](100) NULL,
    [ak_beskrivelse] [ntext] NULL,
    [ak_aktiv] [bit] NULL,
    [ak_epost] [bit] NULL,
    [Template] [text] NULL
 CONSTRAINT [PK_ActivityList] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

DDL для внешней таблицы в DB2

CREATE EXTERNAL TABLE [dbo].[NEMDBreplicaActivityList]
(
    [ID] [int] NOT NULL,
    [Registered] [datetime] NULL,
    [RegisteredBy] [varchar](50) NULL,
    [Name] [varchar](100) NULL,
    [ak_beskrivelse] [nvarchar](4000) NULL,
    [ak_aktiv] [bit] NULL,
    [ak_epost] [bit] NULL,
    [Template] [varchar](900) NULL
)
WITH (DATA_SOURCE = [DS],SCHEMA_NAME = N'dbo',OBJECT_NAME = N'ActivityList')

При запросе внешней таблицы NEMDBreplicaActivityList возникает следующая ошибка

Ошибка при получении данных из server.database.windows.net.db1. Полученное базовое сообщение об ошибке было: «PdwManagedToNativeInteropException ErrorNumber: 46723, MajorCode: 467, MinorCode: 23, Severity: 16, State: 1, ErrorInfo: ak_beskrivelse, исключение типа« Microsoft.SqlServer.DataWarehouse.Tds.PdwManagedTrown »было сгенерировано. '.

Я попытался определить столбец ak_beskrivelse как другие допустимые типы данных внешних таблиц, такие как varchar, с тем же результатом.

К сожалению, мне не разрешено редактировать тип данных столбцов в таблице db1.

Я предполагаю, что ошибка связана с типом данных. Есть идеи, как это исправить?


person Refi    schedule 17.06.2018    source источник
comment
Фактическая максимальная длина ak_beskrivelse 4000 символов? Если больше, попробуйте nvarchar (MAX). Точно так же varchar (MAX) для Template, если более 8000 символов.   -  person Dan Guzman    schedule 17.06.2018
comment
Да, он меньше 4000 символов. Я пробовал nvarchar (max) и varchar (max) с тем же результатом.   -  person Refi    schedule 17.06.2018


Ответы (2)


Я решил аналогичную проблему, создав представление над исходной таблицей, которое приводило текстовое значение как varchar(max), а затем указывало внешнюю таблицу на представление. Так:

CREATE VIEW tmpView
AS 
SELECT CAST([Value] AS VARCHAR(MAX))
FROM [Sourcetable].
Then:
CREATE EXTERNAL TABLE [dbo].[tmpView]
(
 [Value] VARCHAR(MAX) NULL
)
WITH (DATA_SOURCE = [myDS],SCHEMA_NAME = N'dbo',OBJECT_NAME = N'tmpView')
person VivC    schedule 31.07.2019

Создание представления и приведение текстового значения сработали для меня идеально ???? Спасибо!

Создано представление vw_TestReport:

SELECT CAST([Report Date] AS VARCHAR(MAX)) AS [Report Date]
FROM     dbo.TestReport

И создал внешнюю таблицу из представления:

CREATE EXTERNAL TABLE [dbo].[TestReport](
    [Report Date] [varchar](max) NULL
) 
WITH (DATA_SOURCE = [REFToDB],SCHEMA_NAME = N'dbo',OBJECT_NAME = N'vw_TestReport')
person Blanca Garcia    schedule 03.06.2021