2011-04-05 79 views
23

我想批量插入到DB使用SQL Server 2005批量插入可變文件名

下面是代碼。

declare @path varchar(500) 
set @path = 'E:\Support\test.csv'; 

Create table #mytable(name varchar(max), class varchar(max), roll varchar(max)) 

BULK INSERT #mytable FROM @path <-- Error line 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n'); 
Go 
select * from #mytable 
drop table #mytable 

問題:問題是,我的文件路徑是動態的,來自一個變量而不是硬編碼,該編碼不工作 如果我錯誤行改變它下面的工作

BULK INSERT #mytable FROM 'E:\Support\test.csv'; 

請告知如何解決這個問題

+0

什麼是錯誤信息? – wallyk 2011-04-05 05:04:21

回答

29

嘗試使用動態SQL:

declare @sql varchar(max) 
set @sql = 'BULK INSERT #mytable FROM ''' + @path + ''' WITH ... 
exec (@sql) 
+2

對於未來的用戶,請注意變量前/後有3個引號。我花了一段時間才能使它工作,因爲我只是增加了2 – Berni 2014-03-26 21:26:05

+2

換句話說,它不可能使用變量... – 2015-07-14 09:03:34

7
DECLARE @path varchar(50) = 'D:\ARQUIVOS_CARGAS\CABOS\FILE.prn' 
DECLARE @SQL_BULK VARCHAR(MAX) 
SET @SQL_BULK = 'BULK INSERT #TAB FROM ''' + @path + ''' WITH 
     (
     CODEPAGE = ''ACP'', 
     FIRSTROW = 1, 
     FIELDTERMINATOR = ''tab'', 
     ROWTERMINATOR = ''0x0a'', 
     KEEPNULLS 
     )' 

EXEC (@SQL_BULK)