Я пытаюсь параметризовать аргумент 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.
Любая помощь приветствуется!
проблема в том, что LastRow является целым числом; вам может понадобиться использовать LastRow_String для конкатенации в Query; если вас беспокоят белые пробелы, вы можете сделать ltrim (rtrim (@LastRow_String)) – Jayvee
@Jayvee Вот и все! Спасибо огромное! –