Службы SSIS не вставляют вычисленные столбцы
Я использую SSIS для вставки файла Excel в таблицу сервера SQL. Я полагаю, что он использует групповую вставку, и в результате он не вставляется в столбцы "CreationDate" и "ModificationDate" (оба из которых являются вычисляемыми столбцами с getdate () по умолчанию).
Есть ли способ обойти эту проблему?
Кроме того, просто для ясности - оба эти столбца даты не являются частью Excel. Вот точный сценарий:
В моем Excel есть две колонки - код и описание. Моя таблица SQL Server имеет 4 столбца: Код, Описание, CreationDate, ModificationDate.
Таким образом, когда SSIS копирует данные, он копирует Code и Description, но CreationDate и ModificationDate (которые являются вычисляемыми столбцами SQL Server) оба пусты.
4 ответа
Вы должны использовать обычный столбец с ограничением по умолчанию, если вы хотите регистрировать создание. Вычисляемый столбец, определенный как 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" на странице параметров
У вас должно быть ограничение по умолчанию для столбцов, которые определяют get
col1 datetime default getdate()
Также должна быть опция для массовой вставки KEEPNULLS
который должен быть выключен.
Указывает, что пустые столбцы должны сохранять нулевое значение во время операции массового импорта, а не вставлять какие-либо значения по умолчанию для вставленных столбцов. Для получения дополнительной информации см. Сохранение пустых значений или Использование значений по умолчанию во время массового импорта.
KEEPNULLS также задокументировано: http://msdn.microsoft.com/en-us/library/ms187887.aspx
Вставьте производный столбец в ваш поток данных и заполните два отсутствующих столбца нужными значениями.
Значение в вычисляемом столбце физически не существует в базе данных, оно вычисляется каждый раз, когда SQL Server должен получить к нему доступ, поэтому вы не можете сообщить ему значение на вставке.
Вам нужен столбец по умолчанию, который представляет собой столбец со значением по умолчанию, которое вставляется, если вы не сообщите какое-либо другое значение.
CreationDate datetime default getdate()
ModificationDate datetime default getdate()