【发布时间】:2018-06-17 16:28:06
【问题描述】:
我有一个 Azure SQL 服务器,其中有多个数据库。我需要能够跨这些数据库进行查询,并且目前通过外部表解决了这个问题。此解决方案的一个挑战是外部表不支持与普通表相同的所有数据类型。
根据下面的文章,不兼容数据类型的解决方案是在外部表中使用其他类似的数据类型。 https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-data-types#unsupported-data-types。
DB1 中表的 DDL
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
DB2 中外部表的 DDL
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 错误编号:46723,主要代码: 467,次要代码:23,严重性:16,状态:1,错误信息:ak_beskrivelse, 类型异常 'Microsoft.SqlServer.DataWarehouse.Tds.PdwManagedToNativeInteropException' 被扔了。'。
我尝试将 ak_beskrivelse 列定义为其他外部表合法数据类型,例如 varchar,结果相同。
遗憾的是,我不允许编辑 db1 表中列的数据类型。
我假设错误与数据类型有关。任何想法如何解决它?
【问题讨论】:
-
ak_beskrivelse的实际最大长度是4000个字符吗?如果更大,请尝试 nvarchar(MAX)。同样,如果超过 8000 个字符,则为Template的 varchar(MAX)。 -
少于4000个字符,是的。我试过 nvarchar(max) 和 varchar(max),结果一样。
标签: azure tsql azure-sql-database external-tables