2011-09-05 20 views
16

Necesito cargar un par de miles de archivos de datos en la tabla de SQL Server. Así que escribo un procedimiento almacenado que recibe solo un parámetro: nombre de archivo. Pero ... Lo siguiente no funciona .. El "compilador" se queja sobre el parámetro @FileName .. Quiere simplemente una cadena simple ... como 'archivo.txt'. Gracias de antemano.Inserción masiva con el parámetro de nombre de archivo

Ilan.

BULK INSERT TblValues 
FROM @FileName 
WITH 
(
FIELDTERMINATOR =',', 
ROWTERMINATOR ='\n' 
) 
+0

¿Está buscando una solución SQL puro, o es usted capaz de utilizar C#/VB? –

+0

¡Gracias Paul! Ya encontré algo http://stackoverflow.com/questions/4050790/bulk-insert-using-stored-procedure – Ilan

+0

@IIan, si tiene la respuesta, cierre la pregunta, y la próxima vez busque SO para preguntas similares antes de preguntar uno. –

Respuesta

28

The syntax for BULK INSERT statement es:

BULK INSERT 
    [ database_name. [ schema_name ] . | schema_name. ] [ table_name | view_name ] 
     FROM 'data_file' 
    [ WITH 

Por lo tanto, el nombre del archivo debe ser una constante de cadena. para resolver el problema por favor utilice SQL dinámico:

DECLARE @sql NVARCHAR(4000) = 'BULK INSERT TblValues FROM ''' + @FileName + ''' WITH (FIELDTERMINATOR ='','', ROWTERMINATOR =''\n'')'; 
EXEC(@sql); 
+1

Eso es exactamente lo que hice. ¡Gracias! http://stackoverflow.com/questions/4050790/bulk-insert-using-stored-procedure – Ilan

+1

¿Qué sucede con la inyección de SQL? – user441365

Cuestiones relacionadas