在指令碼工作中使用變數

變數讓指令碼工作可以和封裝中的其他物件交換資料。 如需詳細資訊,請參閱 Integration Services (SSIS) 變數

腳本工作會使用 Variables 對象的 屬性 Dts ,讀取和寫入 Variable 封裝中的物件。

注意

類別 ValueVariable 屬性的類型為 Object。 因為腳本工作已啟用 Option Strict ,所以您必須先將 Value 屬性轉換成適當的類型,才能使用它。

您將現有的變數新增至 [指令碼工作編輯器]ReadOnlyVariablesReadWriteVariables 清單中,讓它們可供自訂指令碼使用。 請記住變數名稱有區分大小寫。 在腳本中,您可以透過 Variables 物件的 屬性 Dts 存取這兩種類型的變數。 Value使用屬性來讀取和寫入個別變數。 指令碼工作會以透明的方式管理鎖定,因為指令碼會讀取和修改變數值。

您可以在程式碼中使用變數之前,先透過 Contains 屬性傳回的 Variables 集合之 Variables 方法,檢查變數是否存在。

您也可以使用 VariableDispenser 屬性 (Dts.VariableDispenser) 使用指令碼工作中的變數。 在使用 VariableDispenser時,您必須在自己的程式碼中處理變數值的鎖定語意和資料類型的轉換。 如果您想要使用在設計階段無法使用,但是會在執行階段以程式設計方式建立的變數,可能需要使用 VariableDispenser 屬性,而不是 Variables 屬性。

使用 Foreach 迴圈容器中的指令碼工作

當在 Foreach 迴圈容器中重複地執行指令碼工作時,指令碼通常需要使用列舉值中目前項目的內容。 例如,在使用 Foreach 檔案列舉值時,指令碼需要知道目前的檔案名稱;在使用 Foreach ADO 列舉值時,指令碼需要知道目前資料列中的資料行內容。

變數使得在 Foreach 迴圈容器與指令碼工作之間的此通訊變得可能。 在 [Foreach 迴圈編輯器] 的 [變數對應] 頁面上,將變數指派給單一列舉項目所傳回的每個資料項目。 例如,Foreach 檔案列舉值只會傳回在索引 0 的檔案名稱,因此只需要一個變數對應,然而傳回每個資料列中數個資料行的列舉值,需要您將不同的變數對應到在指令碼工作中要使用的每個資料行。

將列舉項目對應至變數之後,您必須將對應的變數新增至ReadOnlyVariables腳本工作編輯器[腳本] 頁面上的 屬性,使其可供腳本使用。 如需處理資料夾中影像檔之 Foreach 迴圈容器中指令碼工作的範例,請參閱以指令碼工作處理影像

變數範例

下列範例示範如何存取和使用指令碼工作中的變數,以決定封裝工作流程的路徑。 此範例假設您已建立名為 CustomerCount 的整數變數,並將其MaxRecordCount新增至ReadOnlyVariables腳本工作編輯器中的集合。 CustomerCount 變數包含要匯入的客戶記錄數目。 如果其值大於 MaxRecordCount 的值,指令碼工作會報告失敗。 當因為已超過 MaxRecordCount 臨界值而發生失敗時,工作流程的錯誤路徑可以實作任何所需的清除。

若要成功地編譯範例,您需要加入 Microsoft.SqlServer.ScriptTask 組件的參考。

Public Sub Main()  
  
    Dim customerCount As Integer  
    Dim maxRecordCount As Integer  
  
    If Dts.Variables.Contains("CustomerCount") = True AndAlso _  
        Dts.Variables.Contains("MaxRecordCount") = True Then  
  
        customerCount = _  
            CType(Dts.Variables("CustomerCount").Value, Integer)  
        maxRecordCount = _  
            CType(Dts.Variables("MaxRecordCount").Value, Integer)  
  
    End If  
  
    If customerCount > maxRecordCount Then  
            Dts.TaskResult = ScriptResults.Failure  
    Else  
            Dts.TaskResult = ScriptResults.Success  
    End If  
  
End Sub  
using System;  
using System.Data;  
using Microsoft.SqlServer.Dts.Runtime;  
  
public class ScriptMain  
{  
  
    public void Main()  
    {  
        int customerCount;  
        int maxRecordCount;  
  
        if (Dts.Variables.Contains("CustomerCount")==true&&Dts.Variables.Contains("MaxRecordCount")==true)  
  
        {  
            customerCount = (int) Dts.Variables["CustomerCount"].Value;  
            maxRecordCount = (int) Dts.Variables["MaxRecordCount"].Value;  
  
        }  
  
        if (customerCount>maxRecordCount)  
        {  
            Dts.TaskResult = (int)ScriptResults.Failure;  
        }  
        else  
        {  
            Dts.TaskResult = (int)ScriptResults.Success;  
        }  
  
    }  
  
}  
  

Integration Services 圖示 (小型) 使用 Integration Services 保持最新狀態
如需來自Microsoft的最新下載、文章、範例和影片,以及來自社群的所選解決方案,請流覽 MSDN 上的 Integration Services 頁面:

流覽 MSDN 上的 Integration Services 頁面

如需這些更新的自動通知,請訂閱頁面上可用的 RSS 摘要。

另請參閱

Integration Services (SSIS) 變數
在套件中使用變數