2012-01-31 63 views
0

我從Excel導入一些數據到數據庫,問題是我想設置特定的默認值,如00/00/0000datetime列,當Excel文件中沒有可用的日期時。SQL Server 2008中的日期時間問題

getdate()將日期設置爲當前日期,但我想設置爲特定的日期,是否有可能實現這樣的功能。

+0

可能是的。你能更具體地說明你是如何進行導入的嗎? – Diego 2012-01-31 10:29:53

+0

它的csv導入 – 2012-01-31 10:32:09

+0

我想檢查該字段是否爲空,如果是,則將該字段設置爲特定日期 – 2012-01-31 10:32:43

回答

2

當然,你可以設置一個默認值 - 但要注意:DATETIME具有1/1/1753通過12/31/9999的有效範圍 - 因此將其設置爲0/0/0000不是是有效的DATETIME價值!

如果你需要這樣的價值 - 在SQL Server 2008中使用任何DATETIME2(範圍爲1/1/0001通過12/31/9999) - 或使用DATE(沒有任何時間 - 同一範圍內DATETIME2

或者:只是讓你DATETIME/DATETIME2/DATE列可以爲空,並且在沒有日期時插入NULL - 這將是最乾淨的解決方案。

1

我不確定您是如何執行導入的,但是如果您想檢查值是否爲NULL並將其設置爲定義的值,那麼您可以使用SQL IsNull(a,b)其中a是要檢查的值,而b是要返回的價值。

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

可能不是一個好例子,但應該指出你在正確的方向。

或者一旦您的數據已被導入,您可以運行更新腳本以固定值替換所有NULL日期;

或者您可以將數據庫中的日期字段設置爲NOT NULL並給它一個默認值。

2

當您使用bcp或BULK INSERT或SQLBulkCopy時,則可以選擇保留NULL。 如果您不這樣做,那麼您將獲得列的默認值。

"Keeping Nulls or Using Default Values During Bulk Import" MSDN上

如果你不能(說是因爲你得到空字符串不爲空),那麼你可以先使用AA臨時表,然後從該用NULLID,ISNULL和組合加載數據案件。或使用觸發器,但是這會減慢你的速度更比2做負載階躍