Проблема с Datetime в SQL Server 2008 - PullRequest
0 голосов
/ 31 января 2012

Я импортирую некоторые данные из Excel в БД, проблема в том, что я хочу установить конкретное значение по умолчанию, например, от 00/00/0000 до datetime, когда в файле Excel нет даты.

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

Ответы [ 3 ]

2 голосов
/ 31 января 2012

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

См. «Сохранение пустых значений или использование значений по умолчанию во время массового импорта» в MSDN

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

2 голосов
/ 31 января 2012

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

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

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

1 голос
/ 31 января 2012

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

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

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

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

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

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