Share via


在指令碼工作中使用變數

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

指令碼工作使用 Dts 物件的 Variables 屬性,讀取和寫入封裝中的 Variable 物件。

[!附註]

Variable 類別的 Value 屬性其類別為 Object。因為指令碼工作已啟用 Option Strict,所以您必須在使用它之前將 Value 屬性轉換為適當的類型。

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

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

您也可以使用 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 或 TechNet 上的 Integration Services 頁面:

若要得到這些更新的自動通知,請訂閱該頁面上所提供的 RSS 摘要。