我正在使用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
答案 0 :(得分: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
答案 1 :(得分:0)
为什么不直接使用SSIS呢?将Foreach循环容器放到新包装上。获取所有.dtsx文件的完全限定路径。在foreach循环内部,有一个执行包任务并为其分配当前的包路径。
这可以减少运行单个程序包的问题,您可以通过一系列措施(.NET,SQL Agent,Windows调度程序等)解决这个问题。