sql >> Databasteknik >  >> RDS >> Sqlserver

Bulkinsats med hjälp av lagrad procedur

Det är inget fel med din lagrade procedurkod - poängen är:BULK INSERT kommandot kan inte acceptera ett filnamn som en variabel.

Det här fungerar:

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

men detta fungerar aldrig - inom en lagrad proc eller inte:

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

BULK INSERT ZIPCodes 
FROM @filename
WITH 

Så du kan bara inte göra på det här sättet, tyvärr. Du kan överväga att bygga upp din BULK INSERT sats som en sträng (med ett fast filnamn) och sedan köra den som dynamisk SQL - men jag ser egentligen ingen annan 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. Laravel Kan inte ta bort eller uppdatera en överordnad rad:en begränsning av främmande nyckel misslyckas

  2. PostgreSQL:Sex inte så lätta stycken

  3. hur man kontrollerar typ av värde i postgres

  4. Hur man kontrollerar om mysqli_query raderade några rader