Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Inserimento in blocco utilizzando la procedura memorizzata

Non c'è niente di sbagliato nel codice della procedura memorizzata:il punto è:il BULK INSERT comando non può accettare un nome file come variabile.

Questo funziona:

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

ma questo non funziona mai, all'interno di un processo memorizzato o meno:

DECLARE @filename VARCHAR(255)
SET @filename = 'e:\5-digit Commercial.csv' 

BULK INSERT ZIPCodes 
FROM @filename
WITH 

Quindi non puoi farlo in questo modo, sfortunatamente. Potresti prendere in considerazione l'idea di creare il tuo BULK INSERT istruzione come una stringa (con un nome di file fisso) e quindi eseguirlo come SQL dinamico, ma in realtà non vedo nessun'altra soluzione.

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