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

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 に答える
0

これを行うためにSSISを使用しないのはなぜですか? Foreach ループ コンテナーを新しいパッケージにドロップします。すべての .dtsx ファイルの完全修飾パスを取得します。foreach ループ内で、パッケージ実行タスクを作成し、現在のパッケージ パスを割り当てます。

これにより、多くの対策(.NET、SQLエージェント、Windowsスケジューラなど)で解決できる単一のパッケージを実行するという問題が軽減されます

于 2012-07-05T13:52:48.357 に答える