BULK INSERT具有可变文件名

Ami*_*mit 24 sql sql-server

我正在尝试使用sql server 2005批量插入Db

下面是代码.

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
Run Code Online (Sandbox Code Playgroud)

问题:问题是我的文件路径是动态的,来自变量而不是硬编码不起作用如果我将错误行更改为下面它的工作原理

 BULK INSERT #mytable FROM 'E:\Support\test.csv'; 
Run Code Online (Sandbox Code Playgroud)

请告知如何解决这个问题

And*_*mar 34

尝试使用动态SQL:

declare @sql varchar(max)
set @sql = 'BULK INSERT #mytable FROM ''' + @path + ''' WITH ...
exec (@sql)
Run Code Online (Sandbox Code Playgroud)

  • 对于将来的用户,请注意变量之前/之后有3个引号.我花了一段时间才使它工作,因为我只增加了2 (2认同)

小智 8

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)
Run Code Online (Sandbox Code Playgroud)