2014-08-28 105 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存儲過程。