SSIS: «Ошибка вставки в столбец только для чтения <ColumnName>» - PullRequest
1 голос
/ 19 декабря 2009

У меня есть источник Excel, входящий в пункт назначения OLE DB. Я вставляю данные в представление с триггером INSTEAD OF, который обрабатывает все вставки. Когда я пытаюсь выполнить пакет, я получаю эту ошибку:

«Ошибка вставки в столбец только для чтения ColumnName»

alt text

Что я могу сделать, чтобы SSIS знал, что это представление безопасно для вставки, потому что есть триггер INSTEAD OF, который будет обрабатывать вставку?

РЕДАКТИРОВАТЬ (Дополнительная информация):
Еще немного дополнительной информации. У меня есть плоский файл, который вставляется в нормализованную базу данных. Моя первоначальная проблема заключалась в том, как взять плоский файл и вставить эти данные в несколько таблиц, отслеживая все отношения первичного / внешнего ключа. Мое решение состояло в том, чтобы создать VIEW, который имитирует структуру плоского файла, а затем создать триггер INSTEAD OF для этого представления. В моем триггере INSTEAD OF я бы обрабатывал логику поддержания всех связей между таблицами

Мой взгляд выглядит примерно так.

CREATE VIEW ImportView
AS
SELECT
CONVERT(varchar(100, NULL) AS CustomerName,
CONVERT(varchar(100), NULL) AS Address1,
CONVERT(varchar(100), NULL) AS Address2,
CONVERT(varchar(100), NULL) AS City,
CONVERT(char(2), NULL) AS State,
CONVERT(varchar(250), NULL) AS ItemOrdered,
CONVERT(int, NULL) AS QuantityOrdered
...

Мне никогда не нужно будет выбирать из этого представления, я использую его только для вставки в него данных из этого плоского файла, который я получаю. Мне нужно как-то сообщить SQL Server, что поля на самом деле не только для чтения, потому что в этом представлении есть триггер INSTEAD OF.

Ответы [ 3 ]

3 голосов
/ 05 ноября 2013

Кроме того, вы можете просто установить флажок Keep Identity в OLEDB Destination Editor, если ваш столбец равен IDENTITY

0 голосов
/ 20 декабря 2009

Это не идеальное решение, но я нашел решение моей проблемы. Поскольку SSIS жаловалась на вставку в мое представление, я создал таблицу с точно такой же структурой, как и в моем представлении. Затем в триггере INSTEAD OF для этой таблицы я просто вставляю информацию, предназначенную для таблицы, в представление. Это добавляет еще один шаг в процесс импорта, но это не имеет большого значения.

0 голосов
/ 19 декабря 2009

Почему столбец «только для чтения»? Не могли бы вы опубликовать схему для представления и базовых таблиц? Является ли столбец IDENTITY? Есть ли WITH CHECK OPTION на виде? Это производный (рассчитанный) столбец?

UPDATE

Теперь я вижу, немного необычное применение представления, возможно, более подходящим вариантом была бы хранимая процедура - хранимая процедура в БД и команда OLEDB в SSIS.

Ваше окончательное решение с таблицей в качестве пункта назначения на самом деле быстрее, при условии, что вы не используете триггер, а используете массовую вставку из промежуточной таблицы в «финальные» таблицы.

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