2014-08-28 108 views
1

我正在将一个SSIS项目转换为Python。这是我最近遇到的问题,我不知道如何获取SSIS的环境变量。如何使用Python获取SSIS环境变量?

例如,对于SSIS以下SQL代码:

EXEC SSIS.proc_PackageInitalisation 
@packageExecutionInstanceGuid = ? 
,@packageGuid = ? 
,@packageName = ? 
,@packageVersionGuid = ? 
,@packageVersionMajor = ? 
,@packageVersionMinor = ? 
,@packageVersionBuild = ? 
,@packageMachineName = ? 
,@packageUserName = ? 
,@packageProductVersion = ? 
,@packageStartTime = ? 
,@packageParentExecutionId = ? 
,@executionId = ? OUTPUT 

只有@packageParentExecutionId@executionId是用户定义的变量,其余变量在System命名空间。

所以当我使用pyodbc.cursor.execute()时,我无法初始化这些变量。

请帮我解决这个问题。

非常感谢。

+0

我不知道python。但对于SSIS,我相信这些变量不是动态的(即存储在xml中)。所以,如果你可以解析XML文件,你可能会得到这些值。另一方面,如果这些值是动态的并且仅在运行时导出,那么您实际上必须运行该包并将它们临时保存在OS环境变量中。 – rvphx 2014-08-28 16:20:00

+0

我假设这个包存储在SQL Server中,而不是存储在文件系统中。它是否正确? – Bryan 2014-08-28 17:46:30

回答

1

由于受2008版SQL Server的限制,最好使用Python subprocess模块直接调用dtexec。如果包存储在SQL Server中,语法看起来是这样的:

import subprocess 
subprocess.call(['dtexec', '/sql <package_path>']) 

另一种方法是使用xp_cmdshell的调用dtexec从T-SQL,但是自带的备注提到平时的安全注意事项权限部分here由于您已经计划使用Python来运行包,因此我没有看到这种方法的任何需要。

如果/当您升级到SQL Server 2012并使用project deployment model时,可以从T-SQL调用catalog.create_execution存储过程。