2012-09-19 15 views
6

Tengo problemas para insertar el valor nulo de una instrucción de inserción masiva.sql inserte los nulos en el servidor en la columna de tiempo

Dos columnas son nulables y el Id es la identidad.

El int nullable funcionó bien, pero el time no lo hace.

  • Aquí la declaración a granel:

    BULK INSERT Circulation 
    FROM '.....file.cs' 
    WITH (FIRSTROW = 2, MAXERRORS = 0, FIELDTERMINATOR = ',', 
        ROWTERMINATOR = '', KEEPNULLS) 
    
  • He aquí un extracto de la CSV:

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

Lo que significa que estoy tratando de insertar valores nulos en los que tanto columnas El resultado es Ithe int columna con NULL y la columna de tiempo con 00:00:00

enter image description here

+0

que ni siquiera es una declaración de inserción masiva, el ejemplo usa un SP con la nomenclatura "insertar" "valores" – Diogo

Respuesta

1

Para insertar "NULO" en lugar de "valor por defecto de Col2", es necesario utilizar el interruptor -k o la opción KEEPNULL, como se demuestra en los siguientes ejemplos de bcp y 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

No sé por qué la columna de tiempo inserto con 00:00:00, pero si necesita NULL, entonces es posible intentar crear gatillo y ejecutar BULK INSERT con el argumento 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) 
Cuestiones relacionadas