【问题标题】:SQL Server Bulk Insert Ingore or skip last rowSQL Server 批量插入忽略或跳过最后一行
【发布时间】:2017-08-15 09:18:51
【问题描述】:

我正在使用批量插入脚本将一些平面文件导入 SQL Server

一些文件以

结尾
-----------------------------------

所以我想要做的是或跳过最后一行或删除批量插入中的------------------。这些选项之一是否可行?

SET @s = N'BULK INSERT ' + @t + '
           FROM ''' + @f + '''
           WITH (FIELDTERMINATOR = ''|'',
                 ROWTERMINATOR = ''0x0a'',
                 FIRSTROW=2)  '

lastrow = 1 不起作用

【问题讨论】:

  • lastrow = 1 不起作用,因为这样 bulkinsert 将在第 1 行之后停止。您首先必须识别文件中的最后一行,然后使用 lastrow = [faulty row number - 1]
  • 如果每个文件的格式都不一样,如何识别lastrow?
  • 进行批量插入,然后删除带有----的行。
  • 这就是问题所在。由于最后一行的错误----------,它没有插入
  • 在这种情况下,最简单的方法可能是运行一个 powershell 脚本来准备文件(即删除最后一行)。或者更改生成此文件的过程。

标签: sql sql-server bulkinsert


【解决方案1】:

我能想到的唯一方法是首先将整个文件批量插入单个列表(如varchar(max))。您可以识别最后一行,并在您的实际bulk insert 中使用该值。

这不是一个非常直接的方法,但我认为没有其他方法(除非您使用 C# 或 java 或其他方式编写自定义解决方案)。也许你可以使用SQLCMD先读取文件的行数,但我不知道怎么做。

请注意,有一个connect 项目已被微软关闭。在该页面上,Microsoft 建议使用 openrowset 解决方案,可能值得一试,但我怀疑它是否适用于您的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2018-09-24
    • 1970-01-01
    • 2019-09-20
    • 2017-03-30
    • 2018-03-24
    • 1970-01-01
    相关资源
    最近更新 更多