Службы SSIS не вставляют вычисленные столбцы - PullRequest
0 голосов
/ 03 февраля 2012

Я использую SSIS для вставки файла Excel в таблицу сервера SQL. Я полагаю, что он использует групповую вставку, и в результате он не вставляется в столбцы CreationDate и ModificationDate (оба являются вычисляемыми столбцами с getdate () по умолчанию).

Есть ли способ обойти эту проблему?

Кроме того, просто для ясности - оба эти столбца даты не являются частью Excel. Вот точный сценарий:

В моем Excel есть две колонки - код и описание. Моя таблица SQL Server имеет 4 столбца: Код, Описание, CreationDate, ModificationDate.

Таким образом, когда SSIS копирует данные, он копирует Code и Description, но CreationDate и ModificationDate (которые являются вычисляемыми столбцами SQL Server) оба пусты.

Ответы [ 4 ]

3 голосов
/ 03 февраля 2012

Вы должны использовать обычный столбец с ограничением по умолчанию , если вы хотите регистрировать создание вычисляемый столбец , определенный как GETDATE(), будет меняться при каждом запросе.

Также невозможно, чтобы вычисляемый столбец для не был заполнен

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

Это все продемонстрировано здесь:

CREATE TABLE #foo (
   bar int NOT NULL,
   testCol1Null datetime NULL DEFAULT GETDATE(),
   testCol1NotNull datetime NOT NULL DEFAULT GETDATE(),
   testCol2 AS GETDATE()
   );
INSERT #foo (bar, testCol1Null) VALUES (1, NULL);

SELECT * FROM #foo;
WAITFOR DELAY '00:00:00.100';
SELECT * FROM #foo;
WAITFOR DELAY '00:00:00.100';
SELECT * FROM #foo;

DROP TABLE #foo;

Если вы используете задачу Массовая вставка в SSIS , то вам нужно установить «Keep nulls = off / unchecked» на странице параметров

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

У вас должно быть ограничение по умолчанию для столбца (столбцов), которое определяет get

col1 datetime default getdate()

Также должна быть опция для массовой вставки KEEPNULLS, которую следует отключить.

С Массовая вставка в MSDN:

Указывает, что пустые столбцы должны сохранять нулевое значение во время операции массового импорта вместо использования каких-либо значений по умолчанию столбцы вставлены. Для получения дополнительной информации см. Сохранение нулей или Использование Значения по умолчанию при массовом импорте.

KEEPNULLS также задокументировано: http://msdn.microsoft.com/en-us/library/ms187887.aspx

0 голосов
/ 03 февраля 2012

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

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

CreationDate datetime default getdate()
ModificationDate datetime default getdate()
0 голосов
/ 03 февраля 2012

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

...