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