根据表中的数据检索远程文件,以及它们是否在本地使用SQL Server 2008存在

时间:2012-07-03 11:54:37

标签: sql sql-server-2008

任何人都可以告诉我这项任务的最佳方式,我不希望为我编写脚本(我喜欢学习)我只需要一个指针,这将是解决问题的最佳方法,< / p>

我为我们的目录中的每个产品下载了标题为ProdId.xml

的xml文件

我从SQL Server 2008表产品中获取了产品ID列表。并且目前将它们放入Excel并在每个文件之前放置一个wget语句,其中包含我的文件源的完整路径和用户名和密码。

E.g。

wget website/xmlfiles/prodid.xml – username – password

我为每个文件执行此操作。

我想自动化这个过程,所以每天提取所有产品ID的检查,看看文件是否已经存在,如果没有从网站上收集。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

我建议您考虑编写一个SQL Server Integration Services or SSIS包来为您执行此操作。 SSIS可用于数据提取,转换和加载。

网上有很多关于SSIS的教程。以下是一些:

MS SQL Tips - SQL Server Integration Services (SSIS)

SSIS Tutorial: SQL Server 2005 Integration Services Tutorial

SSIS Tutorial: Creating a Simple ETL Package

答案 1 :(得分:0)

最后使用此脚本

DECLARE @Product_ID INT
DECLARE Product CURSOR
FOR SELECT Product_ID
FROM dbo.table

OPEN Product

declare @Paths varchar(128) ,
@FileName varchar(128),
@FileExtension varchar(128)

FETCH NEXT FROM Product
INTO    @Product_ID

WHILE @@FETCH_STATUS = 0
BEGIN

select  @Paths = 'C:\Data\xmls\' ,
@FileExtension = '.xml',
@FileName = @Product_ID


declare @objFSys int
declare @i int
declare @File varchar(1000)

select @File = @Paths + @FileName + @FileExtension
exec sp_OACreate 'Scripting.FileSystemObject', @objFSys out
exec sp_OAMethod @objFSys, 'FileExists', @i out, @File
if @i = 1
print 'Allready There ' + CONVERT(VARCHAR(36), @Product_ID)
else

PRINT 'Neet to get ' + CONVERT(VARCHAR(36), @Product_ID) + '.xml From Source.'

FETCH NEXT FROM Product
INTO @Product_ID

exec sp_OADestroy @objFSys 
END

CLOSE Product
DEALLOCATE Product