SQL Server 2008中的Datetime问题

时间:2012-01-31 10:27:14

标签: database sql-server-2008 datetime

我正在将一些数据从excel导入到db,问题是我想在Excel文件中没有可用日期时将特定的默认值设置为00/00/0000datetime列。

getdate()将日期设置为当前日期,但我想设置为特定日期,是否可以实现此类目标。

3 个答案:

答案 0 :(得分:2)

当您使用bcp或BULK INSERT或SQLBulkCopy时,您可以选择保留NULL。 如果不这样做,那么您将获得该列的默认值。

请参阅MSDN上的"Keeping Nulls or Using Default Values During Bulk Import"

如果你不能(比如因为你得到空字符串而不是NULL)那么你可以先使用一个临时表,然后用NULLID,ISNULL和CASE的组合加载那个数据。或者使用一个触发器,但这会比你在两个步骤中加载更慢。

答案 1 :(得分:2)

确定您可以设置默认值 - 但请注意:DATETIME的有效范围从1/1/175312/31/9999 - 因此将其设置为0/0/0000 NOT 是有效的DATETIME值!

如果您需要这样的值 - 在SQL Server 2008中使用DATETIME2(范围从1/1/000112/31/9999) - 或者使用DATE(没有任何时间 - 与DATETIME2)相同的范围

或者:只是让您的DATETIME/DATETIME2/DATE列可以为空,并在没有日期时插入NULL - 这将是最干净的解决方案。

答案 2 :(得分:1)

我不确定你是如何执行导入的,但是如果你想检查一个值是否为NULL并将其设置为一个定义的值,那么你可以使用SQL IsNull(a,b),其中a是值check和b是要返回的值。

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

可能不是一个很好的例子,但应该指出你正确的方向。

或者,一旦导入了数据,您就可以运行更新脚本,将所有NULL日期替换为固定值;

或者您可以将数据库中的日期字段设置为NOT NULL并为其指定一个defaut值。