2012-01-31 12 views
0

excelからdbにデータをインポートしようとしていますが、Excelファイルから日付を入手できないときに00/00/0000からdatetimeのような特定の既定値を設定する必要があります。SQL Server 2008のDatetimeの問題

getdate()は現在の日付を設定しますが、特定の日付に設定したい場合は、このようなことを達成できますか?

+0

おそらくはい。どのようにインポートを行っているのか、より具体的にすることはできますか? – Diego

+0

そのa csvインポート –

+0

そのフィールドが空であるかどうかチェックしたい場合は、そのフィールドを特定の日付に設定します –

答えて

2

は確か手順よりも、あなたが遅くなります - しかし、注意してください:DATETIME1/1/1753から12/31/9999まで有効範囲を持っている - そうにそれを設定します0/0/0000は有効なDATETIMEとなります!ちょうどあなたDATETIME/DATETIME2/DATEします

か(範囲は1/1/0001から12/31/9999経由で)SQL Server 2008でいずれかDATETIME2を使用する - - - または(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を保持するオプションがあります。 そうしないと、列のデフォルト値が取得されます。あなたは(たとえば、あなたが空の文字列でないNULLを取得しているため)ことができない場合

その後、NULLID、ISNULLとの組み合わせでそれからデータをロードし、その後、あなたが最初のaaステージング表を使用することができますMSDN

"Keeping Nulls or Using Default Values During Bulk Import"を参照してください。場合。またはトリガを使用していますが、これはより多くのように2に負荷を行うことは、デフォルト値を設定することができ

関連する問題