2012-09-19 22 views
6

Mam problem z wstawieniem wartości pustej z instrukcji wstawiania zbiorczego.Wkładka zbiorcza serwera SQL zeruje się z kolumną czasu

Dwie kolumny mają wartość NULL, a identyfikator to tożsamość.

Nudlable int nie działa poprawnie, ale time nie.

  • Oto zestawienie zbiorcze:

    BULK INSERT Circulation 
    FROM '.....file.cs' 
    WITH (FIRSTROW = 2, MAXERRORS = 0, FIELDTERMINATOR = ',', 
        ROWTERMINATOR = '', KEEPNULLS) 
    
  • Oto wyciąg z csv:

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

To znaczy, że staram się wkładać w te obie wartości null kolumny. Rezultatem jest ithe kolumna int NULL i kolumny razem 00:00:00

enter image description here

+0

to nie jest nawet instrukcja wstawiania zbiorczego, w przykładzie użyto SP z nomenklaturą "wstaw" "wartości" – Diogo

Odpowiedz

1

Aby wstawić „null” zamiast „Domyślna wartość COL2”, trzeba użyć przełącznika -k lub KEEPNULL opcja, jak pokazano w poniższych przykładach bcp i BULK INSERT.

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

2

nie wiem dlaczego kolumna czas wstawić z 00:00:00, ale jeśli trzeba NULL to jest możliwe, aby spróbować stworzyć spust i uruchomić BULK INSERT z FIRE_TRIGGER argumentu

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)