2011-04-05 95 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)