2012-09-19 3 views
6

대량 삽입 문에서 null 값을 삽입하는 데 문제가 있습니다.SQL Server 대량 삽입 시간 열로

두 개의 열을 사용할 수 있으며 ID는 ID입니다.

int nullable workd out 괜찮지 만 time은 그렇지 않습니다. 여기

  • 대부분 문 :

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

내가 두 사람에 널 (null)을 삽입하기 위해 노력하고 있음을 의미 : 여기

BULK INSERT Circulation 
FROM '.....file.cs' 
WITH (FIRSTROW = 2, MAXERRORS = 0, FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '', KEEPNULLS) 
  • 는 CSV의 추출물 열. 그 결과, 당신은 -k 스위치를 사용할 필요가 대신 "Col2의의 기본값"의 "NULL"을 삽입하려면 NULL로 ithe INT 열 및 0시 0분 0초

    enter image description here

  • +0

    심지어 대량 삽입 문도 아니며,이 예에서는 "삽입"값이있는 SP를 사용합니다. 명칭 – Diogo

    답변

    1

    와 시간 열입니다 또는 KEEPNULL 옵션을 사용하여 다음 bcp 및 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

    시간 열 00:00:00에 삽입하는 이유는 모르겠지만, 당신이 NULL이 필요하면 그때는 트리거를 작성하려고 FIRE_TRIGGER 인수

    로 대량 삽입을 실행할 수 있습니다
    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)