2

我正在使用 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
4

2 回答 2

0

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

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

于 2012-07-05T13:52:48.357 回答
0

您需要使用 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
于 2012-07-05T08:39:43.573 回答