2016-10-03 2 views
1

Я пытаюсь параметризовать аргумент LASTROW запроса BULK INSERT. Последняя строка данных в текстовом файле, который я импортирую на SQL Server, содержит информацию о количестве строк в текстовом файле. И я планирую использовать это число, чтобы заполнить значение аргумента LASTROW запроса BULK INSERT.Параметрирование массовой вставки для Microsoft SQL Server 2014

Пример текстового файла:

20161003|3504|1360| 
20161003|3540|1441| 
EOF|2 

запросе Я работаю на:

DECLARE @FilePath VARCHAR(500) 
SELECT @FilePath = 'C:\path\textfile.txt' 
DECLARE @file VARCHAR(MAX) 

SELECT @file = (SELECT * FROM OPENROWSET(BULK N'C:\path\textfile.txt', SINGLE_CLOB) AS Content) 

DECLARE @LastRow INT 
DECLARE @LastRow_String VARCHAR(10) 

SELECT @LastRow_String = (SELECT SUBSTRING(@file, CHARINDEX('EOF|', @file)+4, LEN(@file))) 
SELECT @LastRow = (SELECT CAST(@LastRow_String AS INT)) 

DECLARE @Query VARCHAR(MAX) 
SELECT @Query = ('BULK INSERT [Database].[dbo].[Table] FROM ''' + @FilePath + 
''' WITH (FIELDTERMINATOR = ''|'', ROWTERMINATOR = ''|\n'', LASTROW = ' + @LastRow + ')') 

Когда я выполнить приведенный выше запрос, я получаю сообщение об ошибке:

Msg 245, уровень 16, состояние 1, строка 11
Конверсия не удалась при преобразовании значения varchar 'BULK IN SERT [База данных]. [Dbo]. [Таблица] FROM 'C: \ path \ textfile.txt' WITH (FIELDTERMINATOR = '|', ROWTERMINATOR = '| \ n', LASTROW = 'для типа данных int.

Любая помощь приветствуется!

+0

проблема в том, что LastRow является целым числом; вам может понадобиться использовать LastRow_String для конкатенации в Query; если вас беспокоят белые пробелы, вы можете сделать ltrim (rtrim (@LastRow_String)) – Jayvee

+0

@Jayvee Вот и все! Спасибо огромное! –

ответ

0

Проблема в том, что LastRow является целым числом; вам может понадобиться использовать LastRow_String для конкатенации в Query; если вы обеспокоены пробелами, вы можете сделать ltrim (rtrim (@LastRow_String))

Смежные вопросы