2012-10-18 87 views
1

在一個SSIS項目中,我知道如何設置一個變量來保存連接管理器的連接字符串 - 但我該如何去另一種方式?即 - 我有一個現有的SSIS包,並希望找到提供特定連接管理器的連接字符串的變量的名稱。SSIS中的跟蹤參數映射

我可以找到如何設置它的引用的負載,並且確實希望轉到Connection manager> Properties> Expressions會顯示給我,但它不會。我設法找到Package Configuration Organizer,選擇明智的命名參數,編輯它們,到嚮導的第二個對話框找到Exported屬性名稱。這當然不是唯一的方法嗎?

問候,斯圖爾特

編輯 - 這是在Visual Studio 2008

回答

2

首先,搶BIDSHelper這是一個免費的附加在Visual Studio和它至少可以幫助確定何時元素都有表達和應用於它們的配置。一個會有一個藍綠色的亮點,另一個是紫紅色的,是的,一個物體可以同時擁有。

您描述的第一種情況,請查看屬性,表達式並確定表達式的用法。其他對象,您可能需要查看「表達式」選項卡。

配置工作方式不同。您可以使用環境變量,註冊表值,父包值,XML文件或SQL Server表。前三個提供配置值和配置項目(變量,連接管理器等)之間的1:1映射。 XML和SQL Server可以配置很多項目。訂單配置的應用非常重要,因爲您可能有5個配置條目,並且每個配置條目都使用不同的值修改相同的設置。在2005年和2008年如何應用配置也有區別,所以請仔細查看Understanding How Integration Services Applies Configurations

當程序包加載時,BIDS將指示它正試圖加載的配置(查看輸出窗口)。除BIDS突出顯示和那些消息外,這些消息是您存在並正在應用配置的另一個線索。這也是您檢測缺失配置的機會(我期望找到配置X並且沒有找到它=配置資源不存在)或者(我期望配置屬性X但找不到它=配置的東西沒有存在)

我發現最好的方法是定義環境中所有應用程序使用並使用一致配置命名方法的一組公共配置(銷售連接,倉庫連接)。然後,我們爲項目級別的事情使用自定義配置(保險處理軟件包的輸入和輸出路徑將應用於所有軟件包,但銷售額不同),然後是特定於軟件包的第三組配置。我們使用SQL Server表,因爲它使檢查值比通過許多醜陋的XML發現要容易得多。

很多信息,但沒有直接回答你的問題。對於那個很抱歉。您可能能夠檢查對象模型並查看配置的內容,但這很難看。

+0

乾杯Billinkc - BIDSHelper現在安裝及將在未來有用的,但就像你說的它並沒有真正給我答案。 –

0

billinkc很好的答案。除了這個答案(或者充實了「檢查對象模型並查看已配置的部分」)之外,我還在任何包的開始處運行腳本,將所有連接管理器連接字符串的值添加到輸出窗口,接着是每個經理的連接字符串表達式。另外,它循環遍歷所有已經指定用於腳本的變量並輸出該值。在生產中不太有用,但在開發/測試時非常有用。

只是一個腳本任務添加到包流的開始,指定要調試然後將下面的代碼添加到腳本的任何變量:

'Report number of connections 
    Dts.Events.FireInformation(99, "debug", "number of connections = " & Dts.Connections.Count, "", 0, True) 

    'Loop through connection collection 
    For Each cConnection As Microsoft.SqlServer.Dts.Runtime.ConnectionManager In Dts.Connections 

     'Report connection string value 
     Try 
      Dts.Events.FireInformation(99, "debug", "connection """ & cConnection.Name & """ value = " & cConnection.ConnectionString, "", 0, True) 
     Catch 
     End Try 

     'Report connection string expression 
     Try 
      Dts.Events.FireInformation(99, "debug", "connection """ & cConnection.Name & """ constring expression = " & cConnection.GetExpression("ConnectionString"), "", 0, True) 
     Catch 
     End Try 

    Next 

    'Report number of variables 
    Dts.Events.FireInformation(99, "debug", "Number of Variables = " & Dts.Variables.Count, "", 0, True) 

    'Loop through variables collection 
    For Each vVariable As Microsoft.SqlServer.Dts.Runtime.Variable In Dts.Variables 

     'Report variable value 
     Try 
      Dts.Events.FireInformation(99, "debug", "Variable """ & vVariable.Name & """ value = " & vVariable.Value, "", 0, True) 
     Catch 
     End Try 

    Next 
+0

非常感謝Aphillipe--這非常有用,因爲它沒有給我我想要的信息,但給了我足夠的線索,以告訴我如何以不同的方式看待事情。 –

1

由於以上的答案,我意識到,這不是一個變量,而是一個配置。一旦變得清晰,更多谷歌搜索導致解釋爲什麼目標對象在Package Configuration Organizer中爲空(可能有多個)。

答案在配置數據庫中; PackagePath條目包含\ Package.Connections [連接管理器名稱] .Properties [ConnectionString],因此要找出特定映射的來源,請使用類似這樣的內容。

SELECT TOP 1000 [ConfigurationFilter] 
    ,[ConfiguredValue] 
    ,[PackagePath] 
    ,[ConfiguredValueType] 

FROM [數據庫] [DBO]。[Configurations_table] 其中ConfiguredValue LIKE '%對象,其中你有興趣%'

(不知道爲什麼所有沒有在代碼中去塊)。

我仍然認爲它應該更容易,但我希望這可以幫助別人。

問候,斯圖爾特