我正在将一些数据从excel导入到db,问题是我想在Excel文件中没有可用日期时将特定的默认值设置为00/00/0000
到datetime
列。
getdate()
将日期设置为当前日期,但我想设置为特定日期,是否可以实现此类目标。
答案 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/1753
到12/31/9999
- 因此将其设置为0/0/0000
将 NOT 是有效的DATETIME
值!
如果您需要这样的值 - 在SQL Server 2008中使用DATETIME2
(范围从1/1/0001
到12/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值。