Sql server 计划将具有不同名称的平面文件导入SQL server 2014

Sql server 计划将具有不同名称的平面文件导入SQL server 2014,sql-server,sql-server-2014,sql-server-job,Sql Server,Sql Server 2014,Sql Server Job,因为我是SQL Server的初学者,而且我的脚本还不是很完善。我需要关于以下问题的建议 我从远程服务器接收文件到我的机器(大约700/天),如下所示: ABCD.100.1601310200 ABCD.101.1601310210 ABCD.102.1601310215 命名约定: 在这里,第一部分“ABCD”保持不变,中间部分是序列id,每个文件的顺序都是递增的。最后一部分是时间戳 文件结构 该文件没有任何特定扩展名,但可以使用记事本/excel打开。因此可以称为平面文件。每个文件由95列

因为我是SQL Server的初学者,而且我的脚本还不是很完善。我需要关于以下问题的建议

我从远程服务器接收文件到我的机器(大约700/天),如下所示:

ABCD.100.1601310200
ABCD.101.1601310210
ABCD.102.1601310215
命名约定: 在这里,第一部分“ABCD”保持不变,中间部分是序列id,每个文件的顺序都是递增的。最后一部分是时间戳

文件结构 该文件没有任何特定扩展名,但可以使用记事本/excel打开。因此可以称为平面文件。每个文件由95列和20000行组成,固定在第1列的顶部4行和底部4行上的一些垃圾值


现在,我需要在SQLServer中创建一个数据库,在那里我可以使用调度器从这些平面文件导入数据。需要建议。

可能还有其他方法,但这是一种方法:

  • 为表创建格式文件。您只需要创建一次。在步骤2中的导入脚本中使用此文件
  • 基于
    OPENROWSET(BULK“”,FORMATFILE=''
  • 将SQL Server中步骤2中的脚本安排为针对要导入数据的数据库运行

  • 创建格式文件

    这将创建一个用于下一步的格式文件。以下脚本基于现有表在
    C:\Temp\imp.fmt
    中创建一个格式文件(将
    TEST\u TT
    替换为要导入的数据库)。这将创建这样一个格式文件,其中
    作为字段分隔符。如果文件的选项卡作为分隔符,请删除
    -t,
    开关

    DECLARE @cmd VARCHAR(8000);
    SET @cmd='BCP TEST_TT.dbo.[ABCD.100.1601310200] format nul -f "C:\Temp\imp.fmt" -c -t, -T -S ' + (SELECT @@SERVERNAME);
    EXEC master..xp_cmdshell @cmd;
    
    在执行此操作之前,您需要重新配置SQL Server以允许
    xp\u cmdshell
    存储过程。您只需执行一次

    EXEC sp_configure 'show advanced options', 1 
    GO
    RECONFIGURE
    GO
    EXEC sp_configure 'xp_cmdshell', 1 
    GO
    RECONFIGURE
    GO
    

    导入脚本

    此脚本假定:

    • 这些文件需要导入到单独的表中
    • 这些文件位于
      C:\Temp
    • 格式文件为
      C:\Temp\imp.fmt
      (在上一步中生成)


    可能还有其他方法,但这是一种方法:

  • 为表创建格式文件。只需创建一次。在步骤2中的导入脚本中使用此文件
  • 基于
    OPENROWSET(BULK“”,FORMATFILE=''
  • 将SQL Server中步骤2中的脚本安排为针对要导入数据的数据库运行

  • 创建格式文件

    这将创建一个用于下一步的格式文件。以下脚本基于现有表在
    C:\Temp\imp.fmt
    中创建一个格式文件(将
    TEST\u TT
    替换为要导入的数据库)。这将创建这样一个格式文件,其中
    作为字段分隔符。如果文件的选项卡作为分隔符,请删除
    -t,
    开关

    DECLARE @cmd VARCHAR(8000);
    SET @cmd='BCP TEST_TT.dbo.[ABCD.100.1601310200] format nul -f "C:\Temp\imp.fmt" -c -t, -T -S ' + (SELECT @@SERVERNAME);
    EXEC master..xp_cmdshell @cmd;
    
    在执行此操作之前,您需要重新配置SQL Server以允许
    xp\u cmdshell
    存储过程。您只需执行一次

    EXEC sp_configure 'show advanced options', 1 
    GO
    RECONFIGURE
    GO
    EXEC sp_configure 'xp_cmdshell', 1 
    GO
    RECONFIGURE
    GO
    

    导入脚本

    此脚本假定:

    • 这些文件需要导入到单独的表中
    • 这些文件位于
      C:\Temp
    • 格式文件为
      C:\Temp\imp.fmt
      (在上一步中生成)


    你可以安排三个单独的作业来导入每个文件…这对你有用吗?每天我会有大约700多个文件,每个文件都有不同的文件名(数量递增)。现在,我正在复制这些文件(使用windows批处理)到一个文本文件,并从他们的数据库中导入。但我正在SQL server中搜索内置解决方案。“700多个文件”>这是您的问题中应该包含的重要信息!这些文件位于何处?在一个不包含其他文件的文件夹中?文件的数量是否固定,或者是否可以任意添加新文件?它们是否共享相同的结构?这是添加到您的问题中的重要信息。如果没有确切的细节,则为hard来回答您的问题。这些信息应该在您的问题中。使用问题下方的
    Edit
    链接编辑您的问题,并将这些信息添加到您的问题中。您的问题的细节不应该出现在评论部分,人们不应该通过评论来查看细节。此外,您还可以没有指定文件的数量是否是任意的(任何数量的文件在文件名中共享特定模式)。您可以安排三个单独的作业来导入每个文件…这对您有用吗?每天我会有大约700多个文件,每个文件都有不同的文件名(数量递增)。现在,我正在复制这些文件(使用windows批处理)到一个文本文件,并从他们的文件导入到数据库。但我正在搜索SQL server中的内置解决方案。“700多个文件”>这是您的问题中应该包含的重要信息!这些文件位于何处?在一个不包含其他文件的文件夹中?文件的数量是否固定,或者是否可以任意添加新文件?它们是否共享相同的结构?这是添加到您的问题中的重要信息。如果没有确切的细节,则为hard来回答您的问题。这些信息应该在您的问题中。使用问题下方的
    Edit
    链接编辑您的问题,并将这些信息添加到您的问题中。您的问题的细节不应该出现在评论部分,人们不应该通过评论来查看细节。此外,您还可以未指定文件数是否为任意数(文件名中共享特定模式的任意数量的文件)。