2017-09-24 94 views
0

我試圖使用環境變量定義在運行時我的連接字符串參數。SSIS目錄的環境變量

我試圖按照some guides online。所以我定義在包中的參數:

enter image description here

現在的問題:
的指導工作,唯一的問題是,每次執行包的時候,我需要手動選擇我想要的環境文件夾儘管我已經在包裝中使用過了。

enter image description here

SSIS並不認爲自己知道要使用的環境(即使只存在)

我如何重寫呢?

我看到了,我可以使用計劃的工作,並告訴它使用的環境,但因爲我是通過服務和程序運行我的包,這不是有幫助我。我需要一些方式告訴它選擇哪種環境。

回答

1

你不能爲一個良好的環境 - 對環境的想法是,你選擇你想要的執行過程中要使用哪一個。正如你所指出的,你可以在工作中做到這一點。那麼這是否意味着代理人職位具有超自然的權力?否。如果腳本與執行包引用的環境中的一個步驟的工作,你會看到一個熟悉的DTEXEC命令,如:

/ISSERVER "\"\SSISDB\test\test1\Incremental.dtsx\"" /SERVER "\"DESKTOP-NT4K1HQ\"" 
/ENVREFERENCE 1 /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 
/Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E 

我想什麼在此強調的是/ENVREFERENCE 1參數 - 這是代理人工作如何知道選擇哪個環境。

所以回答你的問題是,你總是需要選擇一個環境在執行包(當然,如果你想一個被使用)。在目錄程序的情況下,你會做一些(每this article),如:

EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Child1.dtsx', @[email protected]_id OUTPUT, @folder_name=N'TestDeply4', @project_name=N'Integration Services Project1', 
@use32bitruntime=False, 
@reference_id=1 

哪裏@reference_id = 1是你的環境引用。爲了查找您的環境ID,您必須查詢[SSISDB].[catalog].[environments]視圖。

我有沒有回答你的問題還是你以不同的方式執行你的包?如果你確定你永遠不會需要多於一個的環境,那麼這將表明你根本不需要環境變量。

+0

感謝您的回答。我將需要使用多於1個環境(DEV,QA,PROD ..)。我的問題是我正在像這樣執行包 - >我有一個Web服務,它將參數發送到DB中的SP,它使用'start_execution'執行包,該包引發了一個我沒有提供的錯誤值給這個參數。我的意圖是使用連接字符串的環境變量,所以它可以很容易地被硬編碼,並在必要時進行更改。我是否需要更改它可能取決於數據庫中的表格? – sagi

+0

環境變量是實現您需要的一種好方法,但您仍然必須能夠在創建執行時確定上下文(您必須在調用start_execution之前執行此操作)。我想說,你可以通過一個參數從Web服務傳遞一個環境ID到存儲過程,或者創建一個配置表,在其中存儲ID或環境名稱。 – PacoDePaco

+0

另一個想法:通過給他們分配與您的數據庫/服務器名稱相匹配的名稱來建立您所需要的環境(取決於您如何分離您的環境)。然後通過查詢[SSISDB]。[catalog]。[environments]視圖,您可以使用db/server名稱來提取環境ID。 – PacoDePaco