Sql server 在没有包含包名称的表的情况下执行SSIS包

Sql server 在没有包含包名称的表的情况下执行SSIS包,sql-server,tsql,ssis,Sql Server,Tsql,Ssis,我正在使用SQLServer2005。我在这里有几个SSIS包:C:\SSIS 下面的代码用于执行所有包,但我仍然需要将每个包的名称放在名为packages的表中 我可以在不保存包名的情况下执行所有包吗?我只想提供它们所在位置的路径,并希望SQL完成其余的工作 DECLARE @package_name varchar(200) Declare @PackageCount int Declare @X int Set @X = 1 Set @PackageCount = (Select

我正在使用SQLServer2005。我在这里有几个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

您需要使用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

您需要使用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

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


这将减少您运行单个软件包的问题,您可以通过一系列措施来解决。NET、SQL代理、windows调度程序等。为什么不使用SSI来实现这一点?将Foreach循环容器放到新包上。获取所有.dtsx文件的完全限定路径。在foreach循环中,有一个executepackage任务,并将当前包路径分配给它


这将减少您运行单个软件包的问题,您可以通过一系列措施来解决。NET、SQL代理、windows调度程序等

我看了一下。当我添加执行包任务时,它正在查找保存在数据库中的包。我的包裹都存档了,我看了一下。当我添加执行包任务时,它正在查找保存在数据库中的包。我的包裹都存档了。