批量插入跳过最后一行

时间:2014-09-16 18:56:11

标签: sql sql-server

我正在进行批量插入,我必须跳过最后一行。否则,我收到错误说"批量插入:数据文件中遇到意外的文件结束(EOF)。" 如果我设置了ROWTERMINATOR =' \ r \ n',那么我导入了0行。

我想知道是否有任何代码可以帮助我跳过txt文件的lastrow? (最后一行是动态的。)我的公司目前还没有安装SSIS。

批量插入的代码是

Declare @SQL1 varchar(150), @path varchar(100), 

@pathtable varchar(100), @date datetime

set @date = getdate()


-- set path for files

set @path= 'C:\imp\'

set @pathtable = @path + 'importfile.txt'



delete from IDX

--  set sql

set @SQL1 = "BULK INSERT dbo.table FROM '" + @pathtable 

+ "' WITH (FIRSTROW = 2, MAXERRORS = 0)"


-- Bulk insert

exec(@sql1)

2 个答案:

答案 0 :(得分:2)

问题是最后一行包含导出过程的行数。如果您能够修改导出过程,请确保使用SQL命令:

SET NOCOUNT ON;

如果您使用GUI导出数据,则应该有一个地方可以修改使用的T-SQL或一个设置nocount的选项。

这将阻止最后一行写入您的文件。

如果你无法修改导出过程......你可以疯狂地找到一个控制台应用程序来读取数据并删除最后一行或者基本完成该任务的CLR ..打开文件,删除最后一个行,保存文件,然后调用上面的存储过程批量插入数据。

答案 1 :(得分:1)

您需要多次使用单引号',您使用了双引号",它们在sql server中被视为标识符。

您的查询应如下所示......

Declare @SQL1 varchar(150)
      , @path varchar(100)
      , @pathtable varchar(100)
      , @date datetime

SET @date = getdate();

SET @path= 'C:\imp\'
SET @pathtable = @path + 'importfile.txt'


SET @SQL1 = 'BULK INSERT dbo.table 
             FROM ''' + @pathtable + ''' 
             WITH ( 
                     FIRSTROW  = 2
                   , MAXERRORS = 0
                   )';

现在,如果您打印此SQL语句,它将看起来像这样......

PRINT @SQL1

RESULT:

BULK INSERT dbo.table 
             FROM 'C:\imp\importfile.txt' 
             WITH ( 
                     FIRSTROW  = 2
                   , MAXERRORS = 0
                   )