重述了第一个问题:
你能一次删除文件中的文件来加载数据的X号数据被加载?你可以归档它们吗(把它们移到不同的文件夹,或者只是重命名它们)?或者是否必须假设他们生活在这个文件夹中,或者至少有足够长的时间来克服多种数据运行方式?
如果文件可以在其数据加载后归档,则没有什么大问题。如果这些文件会持续存在,那么您需要记录文件已被加载和处理的事实,并且在后续运行中找到每个发现的文件,然后检查日志以查看它是否已被加载。 (注意:由于文件名不包含年份,因此在使用364天后需要处理一些棘手的问题,假设当前年份适用,并且您应该很好 - 除非这些文件永远都在?在这种情况下,嗯,我猜的文件获取与明年的通覆盖)
对于只使用SQL的解决方案,你需要:
- 加载文件
列表
- 根据您的LoadLog检查它
- 处理新文件
的代码段概述这是如何完成(其中@TargetFolder将是一个参数):
DECLARE @Command nvarchar(2000)
CREATE TABLE #ImportOSFiles (FileName varchar(128))
SET @Command = 'DIR "' + @TargetFolder + '\*.txt" /b'
INSERT #TestFiles
execute master.dbo.xp_cmdshell @Command
DELETE #ImportOSFiles
where FileName is null
(请注意,使用的xp_cmdshell的可能会或可能不会接受你的DBA和/或架构。)
遍历这个表对于以前没有记录的所有文件的内容,并运行BULK INSERT:
CREATE TABLE #LoadData
(Item varchar(1000) not null)
SET @Command = 'BULK INSERT #LoadData
from ' + @ThisFile + '
with
(
FieldTerminator = '''' -- No delimiter
--,RowTerminator = '' -- Default is CR/LF
)
'
EXECUTE sp_exectuesql @Command
这应该产生的数据每行一个未解析一行。下一步可能是将其复制到更永久的表中,以便您可以将文件名(日期)与该文件中的数据相关联。
INSERT #LoatData_Step2 (FileName, DataRow)
select @TargetFile, Item
from #LoadData
然后,所有你需要做的是分析数据,足够复杂的拍摄对象,我不打算进入这里。在SSIS中可能会有一些复杂的功能来解析这种格式的数据......如果存在,那么使用SSIS加载数据可能会更好,因为它具有不使用xp_cmdshell的文件夹/文件循环结构。但是如果SSIS不能自然处理数据格式,我认为你必须做一些RBAR解析或过于复杂的用户定义的函数模式匹配外部应用连接。
由于两个问题会更好 - 两者都需要相当复杂的响应。 – 2012-03-27 13:20:37
认为可能是这种情况,我编辑了原来的问题,很快就会发布后续问题。 – bendataclear 2012-03-27 14:12:03