1

大きなテキストファイル(3億以上のレコード)があります。YYYYMM形式の日付を含むフィールドがあります。ターゲットフィールドは日付タイプで、MS SQL2008R2サーバーを使用しています。大量のデータがあるため、一括挿入を使用したいと思います。これが私がすでに行ったことです:

bulk insert Tabela_5
from 'c:\users\...\table5.csv'
with
(
    rowterminator = '\n',
    fieldterminator = ',',
    tablock
)
select * from Tabela_5

201206in fileは2020-12-06サーバー上にあることがわかりましたが、私はそれを望んでいます2012-06-01(私はその日を気にしません)。そのような形式の日付を日付型のフィールドに一括挿入する方法はありますか?

maciejpituchaよろしくお願いします

4

3 に答える 3

9

SET DATEFORMAT ymd一括挿入ステートメントの前に実行

yyyy-mm-ddとは一般に SQL Server では安全でyyyy-dd-mmないことに注意してください。これが原因です。常に使用しますyyyymmdd。詳細については、日付文字列を変換して検証する最良の方法を参照してください(コメントは特に誤解を強調しています)

于 2012-05-02T13:44:16.060 に答える
7

一括挿入でこれを行う方法はありません。2 つのオプションがあります。

  1. 日付を varchar フィールドに挿入し、クエリを実行して日付を DateTime フィールドに変換します。
  2. SSIS を使用する
于 2012-05-02T13:46:04.863 に答える
2

あなたはその日を気にしないかもしれませんが、SQL は気にします。
YYYYMM は有効な SQL 日付ではありません。
日付には日のコンポーネントが必要です。
あなたの例では、YYMMDD として解析しました。
Jaimalが提案したようにVarCharに挿入し、01を追加して変換できます。

.NET でデータを読み込み、01 を追加して DateTime.ParseExact を使用し、行ごとに非同期で挿入します。成功しなかった解析をキャッチできます。

または、csv で "," を "01," にグローバルに置換できる場合もあります。試してみる価値があります。

于 2012-05-02T15:24:21.983 に答える