6

一括挿入ステートメントから null 値を挿入するのに問題があります。

2 つの列は null 可能で、ID は ID です。

intnullable はうまくいきましたが、そうでtimeはありません。

  • ここでバルクステートメント:

    BULK INSERT Circulation 
    FROM '.....file.cs' 
    WITH ( FIRSTROW = 2, MAXERRORS = 0, FIELDTERMINATOR = ',', 
         ROWTERMINATOR = '', KEEPNULLS)
    
  • csv の抜粋は次のとおりです。

    ID, IDStopLine, IDException, Hour, PositionHour, Day
    
    ,28, 8, 12:20, 52, 0
    
    ,29, 163, , 1, 
    

これらの両方の列にヌルを挿入しようとしていることを意味します。結果は、NULL の int 列と 00:00:00 の time 列です。

ここに画像の説明を入力

4

2 に答える 2

2

00:00:00 で列を挿入する理由はわかりませんが、NULL が必要な場合は、トリガーを作成して、FIRE_TRIGGER 引数を指定して BULK INSERT を実行することができます。

CREATE TRIGGER dateNull ON dbo.Circulation
INSTEAD OF INSERT
AS
BEGIN
  INSERT dbo.Circulation(IdStopline, IdException, Hour, PositionHour, Day) 
  SELECT IdStopline, IdException, NULLIF(Hour, '00:00:00.0000000'), PositionHour, Day FROM inserted
END      

BULK INSERT dbo.Circulation 
FROM 'you_file.csv' 
WITH (FIRSTROW = 2, 
      MAXERRORS = 0, FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n', KEEPNULLS, FIRE_TRIGGERS)
于 2012-11-14T22:12:11.380 に答える
1

"Col2 のデフォルト値" の代わりに "NULL" を挿入するには、次の bcp と BULK INSERT の例に示すように、-k スイッチまたは KEEPNULL オプションを使用する必要があります。

USE AdventureWorks;
GO
BULK INSERT MyTestDefaultCol2
   FROM 'C:\MyTestEmptyField2-c.Dat'
   WITH (
      DATAFILETYPE = 'char',
      FIELDTERMINATOR = ',',
      KEEPNULLS
   );
GO  

http://msdn.microsoft.com/en-us/library/ms187887.aspx

于 2012-09-20T10:57:39.167 に答える