ОБЪЕМНАЯ ВСТАВКА с переменным именем файла - PullRequest
24 голосов
/ 05 апреля 2011

Я пытаюсь выполнить массовую вставку в БД, используя 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'; 

Посоветуйте, пожалуйста, как это исправить

Ответы [ 2 ]

33 голосов
/ 05 апреля 2011

Попробуйте использовать динамический SQL:

declare @sql varchar(max)
set @sql = 'BULK INSERT #mytable FROM ''' + @path + ''' WITH ...
exec (@sql)
8 голосов
/ 05 декабря 2013
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...