我正在尝试参数化BULK INSERT查询的LASTROW参数。 我导入到SQL Server的文本文件中的最后一行数据包含有关文本文件中行数的信息。我打算用这个数字来填充BULK INSERT查询的LASTROW参数的值。
文本文件的一个示例:
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,Level 16,State 1,Line 11
转换varchar值'BULK INSERT [数据库]时转换失败。[dbo]。[表] FROM'C:\ path \ textfile.txt'WITH(FIELDTERMINATOR ='|',ROWTERMINATOR ='| \ n',LASTROW = '到数据类型int。
感谢任何帮助!
答案 0 :(得分:0)
问题是LastRow是一个整数;您可能需要使用LastRow_String连接到Query;如果你担心空格,你可以做ltrim(rtrim(@LastRow_String))