【问题标题】:Execute SSIS packages without a table containing the package name在没有包含包名称的表的情况下执行 SSIS 包
【发布时间】:2012-07-05 13:25:56
【问题描述】:

我使用的是 SQL Server 2005。我有几个 SSIS 包位于此处:C:\SSIS

下面的代码用于执行所有包,但我仍然需要将每个包名放在一个名为 Packages 的表中。

我可以在不保存包名的情况下执行所有包吗?我只想提供他们所在位置的路径,并希望 SQL 完成其余的工作。

DECLARE @package_name varchar(200)

Declare @PackageCount int

Declare @X int

Set @X = 1

Set @PackageCount = (Select COUNT(*) from Packages)

set @FilePath = 'C:\SSIS'

While (@X <= @PackageCount)
Begin

With PackageList as 
(
Select PackageName, Row_Number() Over(Order by PackageName) as  Rownum
From Packages
)
SELECT @package_name = PackageName 
FROM PackageList
Where Rownum = @X

select @cmd = 'DTExec /F "' + @FilePath + @Package_name + '"'

print @cmd

Set @X = @X + 1

exec master..xp_cmdshell @cmd

End

【问题讨论】:

    标签: sql-server tsql ssis


    【解决方案1】:

    您需要使用 xp_cmdshell 对文件夹执行循环并获取文件名。

    这里是一个如何做的例子。当然,您需要清理结果并仅获取重要的行

    SET NOCOUNT ON
    
    DECLARE @Command VARCHAR(100)
    SET @Command = 'dir  C:\test'
    
    DECLARE @Folder VARCHAR(100)
    SET @Folder = 'C:\test'
    
    DECLARE @FilesInAFolder TABLE  (FileNamesWithFolder VARCHAR(500))
    INSERT INTO @FilesInAFolder
    EXEC MASTER..xp_cmdshell @Command
    
    select * from @FilesInAFolder
    

    如何启用 xp_cmdshel:

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

    【讨论】:

      【解决方案2】:

      为什么不直接使用 SSIS 来执行此操作?将 Foreach 循环容器放到一个新包上。获取所有 .dtsx 文件的完全限定路径。在 foreach 循环中,有一个 Execute Package Task 并为其分配当前的包路径。

      这将减少您运行单个程序包的问题,​​您可以通过多种措施(.NET、SQL 代理、Windows 调度程序等)解决该问题

      【讨论】:

      • 我看过这个。当我添加执行包任务时,它正在寻找保存在数据库中的包。我的包裹都存档了。
      猜你喜欢
      • 1970-01-01
      • 2015-01-16
      • 2020-06-09
      • 1970-01-01
      • 2011-02-11
      • 2022-11-22
      • 1970-01-01
      • 2012-08-22
      • 2014-01-02
      相关资源
      最近更新 更多