将.log文件中的行拖入SQL Server表

时间:2016-07-30 14:38:23

标签: sql-server

我有一个非常扁平,简单的日志文件(其中一行是空行的6行),我想将其插入一个简单的5列SQL Server表中。

请原谅我的SQL无知,因为我对这个主题的知识没有受过教育。

以下是.log文件内容: -

-----------Log File content start----------
07/30/2016 00:02:03 :  BATCH CLOSE SUMMARY

MerchantID - 000022673665
TerminalID - 013
BatchItemCount - 650
NetBatchTotal - 5095.00
----------Log file content end-------------

下面是简单的SQL Server表格布局:

CREATE TABLE dbo.CCClose
(
    CloseTime NVARCHAR(50) NOT NULL,
    MercID NVARCHAR(50) NOT NULL,
    TermID NVARCHAR(50) NOT NULL,
    BatchCount NVARCHAR(30) NOT NULL,
    NetBatcTotal NVARCHAR(50) NOT NULL
);

我希望以某种方式让SQL查看每一行,例如:

  • 如果.log文件类似' 批量关闭摘要'然后插入CloseTime else
  • 如果.log文件类似' MerchantID '然后插入MercID else
  • 如果.log文件类似' BatchItemCount '然后插入BatchCount else
  • 如果.log文件类似于' NetBatchTotal '然后插入NetBatchTotal

当然,如果每列的格式正确,那将是很好的,但此时我只是想从这些日志的目录中填充.log文件数据。

我打算使用Crystal Reports构建SQL Server表。

1 个答案:

答案 0 :(得分:2)

评论太长了。

这不是一个简单的过程。您可以使用bulk insert执行此操作。我的想法是使用以下方法将其读入临时表:

  • 类似“----------日志文件内容结束-------------”+新行
  • 之类的记录终止符
  • 换行符的字段分隔符
  • 包含多列varchars
  • 的临时表

然后处理登台表以提取所需的值(和类型)。如果您设置了格式文件,可能还有其他选项,但这会增加另一个复杂程度。

我会将表读入一个临时表,表中每行一行。然后,我会:

  • 使用窗口函数根据“内容开始”行
  • 为行分配记录号
  • 根据记录编号
  • 汇总
  • 使用聚合,字符串函数和转换提取值

也许其他人会提出一种更简单的方法。