2012-01-31 2 views
0

Я импортирую некоторые данные из excel в db, проблема в том, что я хочу установить значение по умолчанию, например 00/00/0000, в datetime, если в файле Excel нет даты.Проблема с Datetime в SQL Server 2008

getdate() устанавливает дату в текущую, но я хочу установить определенную дату, можно ли добиться чего-то подобного.

+0

возможно, да. Можете ли вы уточнить, как вы делаете импорт? – Diego

+0

его импорт csv –

+0

Я хочу проверить, пустое ли это поле, если да, то установите это поле на конкретную дату. –

ответ

2

Конечно, вы можете установить значение по умолчанию - но имейте в виду: DATETIME имеет допустимый диапазон от 1/1/1753 через 12/31/9999 - поэтому установка его 0/0/0000 будет NOT действительный DATETIME значение!

Если вам нужно такое значение - использовать либо DATETIME2 в SQL Server 2008 (диапазон от 1/1/0001 через 12/31/9999) - или использовать DATE (без времени - тот же диапазон, как DATETIME2)

Или: просто сделать DATETIME/DATETIME2/DATE column nullable и вставить NULL, когда нет даты - это было бы самым чистым решением.

1

Я не уверен, как вы выполняете импорт, но если вы хотите проверить, является ли значение NULL и задано его значение, то вы можете использовать SQL IsNull(a,b), где a - это значение для проверки и b это значение для возврата.

insert into [dbo].[tblSomeTable] 
    set [someField] = IsNull(@thisValueMayBeNull, thisValueIfNull) 

Возможно, это не очень хороший пример, но должен указывать на вас в правильном направлении.

Или как только ваши данные были импортированы, вы можете запустить сценарий обновления, чтобы заменить все даты NULL с фиксированным значением;

Или вы можете установить поле даты в базе данных на NOT NULL и присвоить ему значение defaut.

2

Когда вы используете bcp или BULK INSERT или SQLBulkCopy, у вас есть возможность хранить NULL. Если вы этого не сделаете, вы получите значение по умолчанию для столбца.

См "Keeping Nulls or Using Default Values During Bulk Import" на MSDN

Если вы не можете (например, потому что вы получите пустую строку не NULL), то вы можете использовать аа промежуточную таблицу, а затем загрузить данные из этого с помощью комбинации NULLID, ISNULL и ДЕЛО. Или использовать триггер, но это будет замедлять вас вниз более, чем делать нагрузку в 2 шагах

Смежные вопросы