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

Masseindsats ved hjælp af lagret procedure

Der er ikke noget galt med din lagrede procedurekode - pointen er:BULK INSERT kommandoen kan ikke acceptere et filnavn som en variabel.

Dette virker:

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

men dette virker aldrig - i en lagret proc eller ej:

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

BULK INSERT ZIPCodes 
FROM @filename
WITH 

Så du kan bare ikke gøre det på denne måde, desværre. Du kunne overveje at opbygge din BULK INSERT sætning som en streng (med et fast filnavn) og derefter udføre den som dynamisk SQL - men jeg kan ikke rigtig se nogen anden løsning.

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


  1. Hvad er brugen af ​​&operator i SQL SERVER

  2. Hvordan installeres luasql på Linux CentOS 7?

  3. Importer .sql-fil i Access

  4. Afhængig dropdown-boks CakePHP 3