Ошибка в потоке данных служб SSIS при использовании быстрой загрузки - PullRequest
2 голосов
/ 29 февраля 2012

При использовании SSIS для загрузки данных из исходной таблицы у нас есть пункт назначения OLE DB, который использует режим доступа к данным «Таблица или просмотр - быстрая загрузка» (для выполнения которого используется BULK INSERT).Когда мы пытаемся выполнить задачу, мы получаем очень странное сообщение об ошибке:

Ошибка: 4804, Уровень серьезности: 17, Состояние: 1 При чтении текущей строки с хоста преждевременный конец сообщениябыло обнаружено - входящий поток данных был прерван, когда сервер ожидал увидеть больше данных.Программа хоста может быть прервана.Убедитесь, что вы используете поддерживаемый клиентский интерфейс прикладного программирования (API).

Похоже, ошибка указывает на то, что во входящих данных есть какая-то порча, но мы уже удалили исходные данные ивсе выглядит хорошо.Если мы изменим режим доступа к данным на «Таблица или представление» (в котором для вставки используется курсор), каждая строка будет добавлена ​​без ошибок.

Определение таблицы:

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 Ответ

1 голос
/ 29 февраля 2012

Как оказалось, я смог ответить на свой вопрос, поэтому я публикую его здесь, в StackOverflow, чтобы принести пользу сообществу. :)

Проблема была в вычисляемом столбце CUST_CD. После долгих исследований кажется, что BULK INSERT не любит сложные вычисляемые типы (см. /2866840/ispolzovanie-prostranstvennyh-tipov-sql-server-v-zagruzke-dannyh-sluzhb-ssis).. Решение состоит в том, чтобы удалить вычисляемый столбец и просто сделать его пустым varchar (20). Затем я создал новый Выполнить задачу SQL, которая обновляет все пустые строки с вычисленным значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...