2012-07-05 69 views
2

我使用SQL Server 2005中我有設在這裏的幾個SSIS包表:C:\SSIS執行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 

回答

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 
0

爲什麼不直接使用SSIS做到這一點?將Foreach Loop容器放到新包裝上。獲取所有.dtsx文件的完全限定路徑。在foreach循環中,執行一個執行包任務併爲其分配當前包路徑。

這將減少你的問題來運行,你可以通過一系列措施(.NET,SQL代理,Windows調度等)

+0

解決我一看這一個包。當我添加執行包任務時,它正在查找保存在數據庫中的包。我的軟件包都在檔案中。 – Etienne