使用快速加载时SSIS数据流出错

时间:2012-02-29 12:29:28

标签: sql-server-2008 ssis

当使用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]

知道可能导致此错误的原因是什么?

1 个答案:

答案 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行。