salida registrados procedimientos procedimiento parámetros parametros número nombres llamar ejemplo ejecutar desde declarar con coincide almacenados almacenado sql sql-server-2008 stored-procedures bulkinsert

registrados - procedimiento almacenado java sql server



Inserción masiva utilizando procedimiento almacenado (2)

No hay nada de malo en su código de procedimiento almacenado: el punto es: el comando BULK INSERT no puede aceptar un nombre de archivo como variable.

Esto funciona:

BULK INSERT ZIPCodes FROM ''e:/5-digit Commercial.csv'' WITH

pero esto nunca funciona, dentro de un proceso almacenado o no:

DECLARE @filename VARCHAR(255) SET @filename = ''e:/5-digit Commercial.csv'' BULK INSERT ZIPCodes FROM @filename WITH

Entonces, simplemente no puedes hacerlo de esta manera, desafortunadamente. Podría considerar construir su BULK INSERT como una cadena (con un nombre de archivo fijo) y luego ejecutarla como SQL dinámico, pero realmente no veo ninguna otra solución.

DECLARE @filepath nvarchar(500) SET @filepath = N''e:/5-digit Commercial.csv'' DECLARE @bulkinsert NVARCHAR(2000) SET @bulkinsert = N''BULK INSERT ZIPCodes FROM '''''' + @filepath + N'''''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '''','''', ROWTERMINATOR = ''''/n'''')'' EXEC sp_executesql @bulkinsert

Tengo una consulta que funciona bien:

BULK INSERT ZIPCodes FROM ''e:/5-digit Commercial.csv'' WITH ( FIRSTROW = 2 , FIELDTERMINATOR = '','', ROWTERMINATOR = ''/n'' )

pero ahora quiero crear un procedimiento almacenado para ello.

He escrito el código siguiente para hacer su procedimiento almacenado:

create proc dbo.InsertZipCode @filepath varchar(500)=''e:/5-digit Commercial.csv'' as begin BULK INSERT ZIPCodes FROM @filepath WITH ( FIRSTROW = 2 , FIELDTERMINATOR = '','', ROWTERMINATOR = ''/n'' ) end

pero muestra un error:

Msg 102, nivel 15, estado 1, procedimiento InsertZipCode, línea 6 Sintaxis incorrecta cerca de ''@filepath''.

Msg 319, nivel 15, estado 1, procedimiento InsertZipCode, línea 7 Sintaxis incorrecta cerca de la palabra clave ''con''. Si esta instrucción es una expresión de tabla común, una cláusula xmlnamespaces o una cláusula de contexto de seguimiento de cambios, la instrucción anterior debe terminarse con un punto y coma.

Dígame qué estoy haciendo mal y qué puedo hacer para que funcione en el procedimiento almacenado.

Gracias


Simplemente prueba, creo que debes subir este archivo CSV directamente a la unidad ''E''. Para eso, necesitas tener derechos de administrador, creo, o preguntar a alguien que esté en la administración de la base de datos.

create procedure dbo.InsertZipCode AS BEGIN SET NOCOUNT ON; BULK INSERT ZIPCodes from ''e:/5-digit Commercial.csv'' WITH ( FIELDTERMINATOR = '','', ROWTERMINATOR = ''/n'' ) END