我有一個一般性問題,希望有人能回答有關創建用于資料流組件的自定義屬性的問題。
是否可以創建自定義屬性以在列級別使用?我可以在組件級別創建自定義屬性,沒問題,但這對我沒有好處。
我想向輸入列元資料添加兩個屬性(加密和解密)。
假設我有一組輸入列 col1、col2、col3。作為一名開發人員,我想將 col3 的 Encrypt 值設定為 true,以便在運行時,col3 在加載到資料庫之前被加密。
我已經使用自定義組件成功加密和解密。盡管如此,我還是在描述列中使用了值“e”和“d”,然后在 PreExecute 期間評估了該描述。我根據 Description 的值設定了一個狀態物件,并將其添加到在 ProcessInput 期間處理的集合中。我不認為使用描述是一件好事,這就是對自定義屬性的需要。
uj5u.com熱心網友回復:
SSIS 列是否具有自定義屬性?
答案是肯定的。SSIS 列是繼承IDTSColumn130介面的物件。如SSIS 檔案中所述,此介面包含一個名為的屬性,該屬性包含由組件添加到輸入CustomPropertyCollection的物件集合。IDTSCustomProperty100
一些組件將一些自定義屬性添加到 SSIS 列,例如Derived Column Transformation。據我所知,一個名為的自定義組件FriendlyExpression用于以純文本形式存盤運算式。但是,無法在 Integration Services 包設計器 (Visual Studio) 中添加自定義屬性。
如何添加自定義屬性?
我認為唯一的方法是以編程方式創建包并編輯這些值或開發一個在運行時添加這些屬性的自定義 SSIS 組件。
這是使用 C#讀取派生列轉換的自定義屬性的示例。(參考)
foreach (IDTSInputColumn localIColumn in localInput.InputColumnCollection)
{
if (localIColumn.CustomPropertyCollection.Count == 2)
{
repository.AddAttribute(componentRepositoryID, localInput.Name " [" localIColumn.Name "] [ID: " localIColumn.ID.ToString() "]", "From [" localIColumn.UpstreamComponentName "] " FormatColumnDescription(localIColumn.Name, localIColumn.DataType, localIColumn.Length, localIColumn.Precision, localIColumn.Scale) " Expression "
localIColumn.CustomPropertyCollection["FriendlyExpression"].Value != null ? localIColumn.CustomPropertyCollection["FriendlyExpression"].Value.ToString() : "Not Available"
);
}
else
{
repository.AddAttribute(componentRepositoryID, localInput.Name " [" localIColumn.Name "] [ID: " localIColumn.ID.ToString() "]", "From [" localIColumn.UpstreamComponentName "] " FormatColumnDescription(localIColumn.Name, localIColumn.DataType, localIColumn.Length, localIColumn.Precision, localIColumn.Scale) " Expression (See Ouput Column)");
}
//repository.AddObject(localIColumn.Name, "", ColumnEnumerator.ObjectTypes.Column, componentRepositoryID);
}
備擇方案
您可以將列元資料存盤在外部資料源(SQL、XML 等)中并在運行時加載它。或者您可以使用Description您在問題中提到的屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/415829.html
標籤:
上一篇:SQLServer資料庫角色-表
下一篇:在嵌套查詢中內連接多個表
