Sql server 计划将具有不同名称的平面文件导入SQL server 2014
因为我是SQL Server的初学者,而且我的脚本还不是很完善。我需要关于以下问题的建议 我从远程服务器接收文件到我的机器(大约700/天),如下所示: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列
ABCD.100.1601310200
ABCD.101.1601310210
ABCD.102.1601310215
命名约定:
在这里,第一部分“ABCD”保持不变,中间部分是序列id,每个文件的顺序都是递增的。最后一部分是时间戳
文件结构
该文件没有任何特定扩展名,但可以使用记事本/excel打开。因此可以称为平面文件。每个文件由95列和20000行组成,固定在第1列的顶部4行和底部4行上的一些垃圾值
现在,我需要在SQLServer中创建一个数据库,在那里我可以使用调度器从这些平面文件导入数据。需要建议。可能还有其他方法,但这是一种方法:
OPENROWSET(BULK“”,FORMATFILE=''
创建格式文件 这将创建一个用于下一步的格式文件。以下脚本基于现有表在
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
可能还有其他方法,但这是一种方法:
OPENROWSET(BULK“”,FORMATFILE=''
创建格式文件 这将创建一个用于下一步的格式文件。以下脚本基于现有表在
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
链接编辑您的问题,并将这些信息添加到您的问题中。您的问题的细节不应该出现在评论部分,人们不应该通过评论来查看细节。此外,您还可以未指定文件数是否为任意数(文件名中共享特定模式的任意数量的文件)。