参数化Microsoft SQL Server 2014的批量插入

时间:2016-10-03 18:23:54

标签: tsql sql-server-2014

我正在尝试参数化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。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

问题是LastRow是一个整数;您可能需要使用LastRow_String连接到Query;如果你担心空格,你可以做ltrim(rtrim(@LastRow_String))