当使用SSIS从源表加载数据时,我们有一个OLE DB目标,它使用数据访问模式“表或视图 - 快速加载”(它使用BULK INSERT来完成工作)。当我们尝试执行任务时,会收到一条非常奇怪的错误消息:
错误:4804,严重性:17,状态:1从中读取当前行 主机,遇到过早的消息结束 - 传入的数据 当服务器期望看到更多数据时,流被中断。该 主机程序可能已经终止。确保您使用的是 支持的客户端应用程序编程接口(API)。
错误似乎表明传入数据中存在某种损坏,但我们已经清理了源数据,一切看起来都不错。如果我们将数据访问模式更改为“表或视图”(使用游标执行INSERT),则会添加每一行而不会出现任何错误。
表格定义:
CREATE TABLE [dbo].[CUST](
[CUST_FIRST_NM] [varchar](50) NOT NULL,
[CUST_MIDL_INIT] [char](1) NULL,
[CUST_LAST_NM] [varchar](50) NOT NULL,
[CUST_EMAIL_ADDR] [varchar](100) NULL,
[CUST_TELE_PHONE_NBR] [int] NULL,
[CUST_TELE_CNTRY_CD] [smallint] NULL,
[CUST_TELE_AREA_CD] [smallint] NULL,
[LAST_UPD_DTTM] [datetime] NOT NULL,
[CUST_ID] [bigint] IDENTITY(1,1) NOT NULL,
[CUST_CD] AS ('PUB'+right(CONVERT([varchar](max),CONVERT([varbinary],[CUST_ID],0),(1)),(7))),
CONSTRAINT [XPKCUST] PRIMARY KEY CLUSTERED
(
[CUST_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
知道可能导致此错误的原因是什么?
答案 0 :(得分:1)
事实证明,我能够回答我自己的问题,所以我在StackOverflow上发布它以使社区受益。 :)
问题是计算列CUST_CD。经过大量的研究,似乎BULK INSERT不喜欢复杂的计算类型(参见https://stackoverflow.com/questions/4031909/using-sql-server-spatial-types-in-ssis-data-load)。解决方案是删除计算列,然后将它变为varchar(20)NULL。然后我创建了一个新的执行SQL任务,使用计算值更新任何NULL行。