Tworzenie miejsca docelowego przy użyciu składnik skryptów
Możesz użyć obiekt docelowy składnika w przepływ danych Integration Services pakiet, aby zapisać dane otrzymane ze źródeł kopalnianych i transformacji do źródło danych.Zwykle łączy składnika docelowego danych źródło za pośrednictwem istniejącego menedżer połączeń.
Aby uzyskać omówienie składnik skryptów, zobacz Rozszerzanie przepływu danych ze składnikiem skryptu.
Składnik skryptów i kodu infrastruktury, generujący można znacznie uprościć proces opracowywania niestandardowego składnik przepływ danych.Jednak aby zrozumieć, jak działa składnik skryptów, użytkownik może być przydatne do odczytu przez kolejne etapy rozwoju składniki przepływ danych niestandardowych w Opracowywanie danych niestandardowy składnik przepływu sekcji, a szczególnie Opracowywanie niestandardowych docelowego składnika.
Wprowadzenie do składnika docelowego
Po dodaniu składnika skryptów do przepływu danych karty SSIS Projektant, Wybieranie typu składnika skryptów otwiera okno dialogowe i monituje o wybranie źródło, docelowy, lub transformacji skryptu.W tym oknie dialogowym Wybierz docelowy.
Następnie podłącz wyjście transformacja do obiekt docelowy składnika w SSIS projektanta.Do testowania, można połączyć źródło bezpośrednio do obiekt docelowy bez wszelkie przekształcenia.
Konfigurowanie składnika docelowego w trybie projektowania metadanych
Po wybraniu opcji tworzenia obiekt docelowy składnika można skonfigurować za pomocą składnika Script Editor transformacji.Aby uzyskać więcej informacji, zobacz Konfigurowanie składnik skryptów w programie Script Editor składnika.
Wybierz język skryptu użytku docelowego skryptu, możesz zestaw ScriptLanguage właściwość skryptu strona Script Editor transformacji okno dialogowe.
Ostrzeżenie
Aby zestaw domyślny język wykonywanie skryptów dla składnika wykonywanie skryptów, użyj język skryptowy opcji na Ogólne strona Opcje okno dialogowe.Aby uzyskać więcej informacji, zobacz Strony głównej.
przepływ danych obiekt docelowy składnik posiada jedno wejście i wyjście nie.Konfigurowanie dane wejściowe dla składnika jest jedną z czynności, które należy wykonać w trybie projektowania metadane za pomocą Script Editor transformacji, zanim napisać niestandardowy skrypt.
Dodawanie menedżerów połączenia
Zwykle składnika docelowego używa istniejącego menedżer połączeń do połączenia z danymi źródło , do której zapisuje dane z przepływ danych.Na menedżer połączeńs strona Script Editor transformacji, kliknij Dodaj dodać odpowiednie menedżer połączeń.
Menedżer połączeń jest jednak tylko jednostkę wygodną hermetyzuje i przechowuje informacje wymagane do nawiązywania połączenia z danymi źródło określonego typu.Należy napisać własny kod niestandardowy do załadowania lub zapisania danych i ewentualnie do otwierania i zamykania połączeń danych źródło.
Aby uzyskać ogólne informacje dotyczące menedżerów połączenia ze składnikiem skryptu, zobacz Połączenia ze źródłami danych w składniku skryptów.
Więcej informacji o Menedżerowie połączenia strona Script Editor transformacji, zobacz Edytor skryptów transformacji (strona menedżerów połączenia).
Konfigurowanie składników produkcji i wprowadzania kolumn
A obiekt docelowy składnik posiada jedno wejście i wyjście nie.
Na kolumna wprowadzania strona Script Editor transformacji, lista kolumna pokazuje dostępne kolumna z danych wyjściowych składnik nadrzędny przepływ danych.Zaznacz kolumny, które chcesz zapisać.
Więcej informacji o Kolumny wprowadzania strona Script Editor transformacji, zobacz Edytor skryptów transformacji (strona kolumn danych wejściowych).
Wejść i wyjść strona Script Editor transformacji zawiera pojedynczą interwencję można zmienić.Można będzie odnosić się do danych wejściowych według jego nazwy w skrypcie przy użyciu właściwość metoda dostępu utworzone w automatycznie wygenerowany kod.
Więcej informacji o wejść i wyjść strona Script Editor transformacji, zobacz Skrypt transformacji edytora (wejść i wyjść strony).
Dodawanie zmiennych
Jeśli chcesz użyć istniejących zmiennych w skrypcie, można dodać je w ReadOnlyVariables i ReadWriteVariables właściwość pola na skryptu strona Script Editor transformacji.
Po dodaniu wielu zmiennych w polach właściwość Zmienna nazwy należy oddzielić przecinkami.Wiele zmiennych można również wybrać, klikając przycisk wielokropka (…) przycisk Dalej, aby ReadOnlyVariables i ReadWriteVariables pola właściwość, a następnie wybierając zmiennych w wybierz zmienne okno dialogowe.
Aby uzyskać ogólne informacje dotyczące zmiennych składnika skryptów, zobacz Korzystanie ze zmiennych składnik skryptów.
Więcej informacji o skryptu strona Script Editor transformacji, zobacz Edytor skryptów transformacji (skrypt strony).
Składnika docelowego w trybie projektowania kodu skryptów
Po skonfigurowaniu metadane dla składnika można napisać niestandardowy skrypt.In the Script Transformation Editor, on the Script page, click Edit Script to open the Microsoft Visual Studio Tools for Applications (VSTA) IDE where you can add your custom script.The scripting language that you use depends on whether you selected Microsoft Visual Basic 2008 or Microsoft Visual C# 2008 as the script language for the ScriptLanguage property on the Script page.
Ważne informacje dotyczą wszystkich rodzajów składników utworzone przy użyciu składnik skryptów, zobacz Kodowanie i debugowanie składnika skryptów.
Opis automatycznie wygenerowany kod
Po otwarciu IDE VSTA po utworzeniu i skonfigurowaniu obiekt docelowy składnika, edytowalne ScriptMain klasy pojawi się w edytorze kodu z stub dla ProcessInputRow metoda.ScriptMain Klasa jest gdzie napisać kod niestandardowy i ProcessInputRow Najważniejsze jest metoda w części docelowy.
Jeśli otworzysz Eksplorator projektu okna w VSTA widać składnik skryptów również został wygenerowany tylko do odczytu, BufferWrapper i ComponentWrapper elementów projektu.ScriptMain Klasa dziedziczy z UserComponent klasy w ComponentWrapper element projektu.
Przy uruchomieniu czas, aparat przepływ danych wywołuje ProcessInput metoda w UserComponent klasy, które zastępuje ProcessInput metoda ScriptComponent Klasa nadrzędnaProcessInput z kolei pętli wierszy w buforze wejściowym i wywołania metoda ProcessInputRow jedną metodę czas dla każdego wiersza.
Pisanie kodu niestandardowego
Aby zakończyć tworzenie niestandardowej obiekt docelowy składnika, należy napisać skrypt w następujących metod dostępnych w ScriptMain klasy
Zastąpić AcquireConnections metoda, aby nawiązać połączenie źródło danych zewnętrznych.Wyodrębnij obiekt połączenia lub informacje wymagane połączenie z menedżer połączeń.
Zastąpić PreExecute metoda przygotowania do zapisywania danych.Na przykład, możesz utworzyć i skonfigurować SqlCommand i jego parametry, w tym metoda.
Użyj zastąpiona ProcessInputRow metoda kopiowania każdego wiersza wejściowego do źródło danych zewnętrznych.Na przykład dla SQL Server obiekt docelowy, wartości kolumna można skopiować do parametrów SqlCommand i wykonać polecenia jednym czas dla każdego wiersza.Dla plik prosty miejsca przeznaczenia, można napisać wartości dla każdej kolumna, aby StreamWriter, oddzielając wartości przez ogranicznik kolumna.
Zastąpić PostExecute metoda rozłączyć się z zewnętrznego źródło danych, jeśli to konieczne i wykonywanie wszelkich innych wymagane czyszczenie.
Przykłady
Następujące przykładach kodu, który jest wymagany w ScriptMain klasy do tworzenia obiekt docelowy składnika.
Ostrzeżenie
These examples use the Person.Address table in the AdventureWorks2008R2 sample database and pass its first and fourth columns, the int AddressID and nvarchar(30) City columns, through the data flow.Te same dane są używane w źródło, transformacja i przeznaczenia próbek w tej sekcji.Dodatkowe wymagania wstępne i założenia są udokumentowane na przykład każdy.
ADO.Przykład docelowego netto
Ten przykład demonstruje obiekt docelowy składnik, który korzysta z istniejącego ADO.NET menedżer połączeń, aby zapisać dane z przepływ danych w SQL Server tabela.
Jeśli chcesz uruchamiać ten kod przykładowy, należy skonfigurować pakiet i składnik w następujący sposób:
Tworzenie ADO.NET menedżer połączeń, który używa SqlClient dostawca, aby połączyć się z AdventureWorks2008R2 bazy danych.
Tworzenie obiekt docelowy tabela, uruchamiając następujące Transact-SQL w AdventureWorks2008R2 bazy danych:
CREATE TABLE [Person].[Address2]( [AddressID] [int] NOT NULL, [City] [nvarchar](30) NOT NULL )
Dodaj nowy składnik skryptów do powierzchni projektanta przepływu danych i skonfiguruj ją jako obiekt obiekt docelowy.
Łączenie danych wyjściowych kopalnianych źródło lub transformacja do składnika docelowego w SSIS projektanta.(Źródło można podłączyć bezpośrednio do obiekt docelowy bez wszelkie przekształcenia.) To wyjście powinno dostarczyć danych z Person.Address tabela AdventureWorks2008R2 przykładowej bazy danych, zawierający co najmniej AddressID i City kolumny.
Otwórz Script Editor transformacji.Na Wprowadzania kolumn strona, zaznacz AddressID i City kolumny danych wejściowych.
Na wejść i wyjść strona, należy zmienić dane wejściowe z nazwę bardziej opisową, taką jak MyAddressInput.
Na Menedżerowie połączenia strona, dodawanie lub tworzenie ADO.NET menedżer połączeń o nazwie takiej jak MyADONETConnectionManager.
Na skryptu strona, kliknij przycisk Edytowanie skryptu i wprowadź następujący skrypt.Następnie zamknij środowiska programistycznego skryptu.
Zamknij Script Editor transformacji i uruchom próbki.
Imports System.Data.SqlClient
...
Public Class ScriptMain
Inherits UserComponent
Dim connMgr As IDTSConnectionManager100
Dim sqlConn As SqlConnection
Dim sqlCmd As SqlCommand
Dim sqlParam As SqlParameter
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
connMgr = Me.Connections.MyADONETConnectionManager
sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)
End Sub
Public Overrides Sub PreExecute()
sqlCmd = New SqlCommand("INSERT INTO Person.Address2(AddressID, City) " & _
"VALUES(@addressid, @city)", sqlConn)
sqlParam = New SqlParameter("@addressid", SqlDbType.Int)
sqlCmd.Parameters.Add(sqlParam)
sqlParam = New SqlParameter("@city", SqlDbType.NVarChar, 30)
sqlCmd.Parameters.Add(sqlParam)
End Sub
Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)
With sqlCmd
.Parameters("@addressid").Value = Row.AddressID
.Parameters("@city").Value = Row.City
.ExecuteNonQuery()
End With
End Sub
Public Overrides Sub ReleaseConnections()
connMgr.ReleaseConnection(sqlConn)
End Sub
End Class
using System.Data.SqlClient;
public class ScriptMain:
UserComponent
{
IDTSConnectionManager100 connMgr;
SqlConnection sqlConn;
SqlCommand sqlCmd;
SqlParameter sqlParam;
public override void AcquireConnections(object Transaction)
{
connMgr = this.Connections.MyADONETConnectionManager;
sqlConn = (SqlConnection)connMgr.AcquireConnection(null);
}
public override void PreExecute()
{
sqlCmd = new SqlCommand("INSERT INTO Person.Address2(AddressID, City) " +
"VALUES(@addressid, @city)", sqlConn);
sqlParam = new SqlParameter("@addressid", SqlDbType.Int);
sqlCmd.Parameters.Add(sqlParam);
sqlParam = new SqlParameter("@city", SqlDbType.NVarChar, 30);
sqlCmd.Parameters.Add(sqlParam);
}
public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)
{
{
sqlCmd.Parameters["@addressid"].Value = Row.AddressID;
sqlCmd.Parameters["@city"].Value = Row.City;
sqlCmd.ExecuteNonQuery();
}
}
public override void ReleaseConnections()
{
connMgr.ReleaseConnection(sqlConn);
}
}
Przykład docelowego pliku płaski
Ten przykład demonstruje składnika docelowego, który używa istniejącego plik prosty menedżer połączeń, aby zapisać dane z przepływ danych do plik prosty.
Jeśli chcesz uruchamiać ten kod przykładowy, należy skonfigurować pakiet i składnik w następujący sposób:
Tworzenie połączenia pliku prostego menedżera, który łączy się z obiekt docelowy pliku.Plik musi istnieć; obiekt docelowy zostanie utworzony przez składnik.Skonfiguruj plik obiekt docelowy jako plik rozdzielany przecinkami, który zawiera AddressID i City kolumny.
Dodaj nowy składnik skryptów do powierzchni projektanta przepływu danych i skonfiguruj ją jako obiekt obiekt docelowy.
Łączenie danych wyjściowych kopalnianych źródło lub transformacja do składnika docelowego w SSIS projektanta.(Źródło można podłączyć bezpośrednio do obiekt docelowy bez wszelkie przekształcenia.) Te dane wyjściowe powinny dostarczyć danych z Person.Address tabela AdventureWorks2008R2 Przykładowe bazy danych i powinny zawierać co najmniej AddressID i City kolumny.
Otwórz Script Editor transformacji.Na Kolumny wprowadzania strona, zaznacz AddressID i City kolumny.
Na wejść i wyjść strona, należy zmienić dane wejściowe z nazwę bardziej opisową, taką jak MyAddressInput.
Na Menedżerowie połączenia strona, dodawanie lub tworzenie pliku prostego połączenia Menedżera z nazwę opisową, taką jak MyFlatFileDestConnectionManager.
Na skryptu strona, kliknij przycisk Edytowanie skryptu i wprowadź następujący skrypt.Następnie zamknij środowiska programistycznego skryptu.
Zamknij Script Editor transformacji i uruchom próbki.
Imports System.IO
...
Public Class ScriptMain
Inherits UserComponent
Dim copiedAddressFile As String
Private textWriter As StreamWriter
Private columnDelimiter As String = ","
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
Dim connMgr As IDTSConnectionManager100 = _
Me.Connections.MyFlatFileDestConnectionManager
copiedAddressFile = CType(connMgr.AcquireConnection(Nothing), String)
End Sub
Public Overrides Sub PreExecute()
textWriter = New StreamWriter(copiedAddressFile, False)
End Sub
Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)
With textWriter
If Not Row.AddressID_IsNull Then
.Write(Row.AddressID)
End If
.Write(columnDelimiter)
If Not Row.City_IsNull Then
.Write(Row.City)
End If
.WriteLine()
End With
End Sub
Public Overrides Sub PostExecute()
textWriter.Close()
End Sub
End Class
using System.IO;
public class ScriptMain:
UserComponent
{
string copiedAddressFile;
private StreamWriter textWriter;
private string columnDelimiter = ",";
public override void AcquireConnections(object Transaction)
{
IDTSConnectionManager100 connMgr = this.Connections.MyFlatFileDestConnectionManager;
copiedAddressFile = (string) connMgr.AcquireConnection(null);
}
public override void PreExecute()
{
textWriter = new StreamWriter(copiedAddressFile, false);
}
public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)
{
{
if (!Row.AddressID_IsNull)
{
textWriter.Write(Row.AddressID);
}
textWriter.Write(columnDelimiter);
if (!Row.City_IsNull)
{
textWriter.Write(Row.City);
}
textWriter.WriteLine();
}
}
public override void PostExecute()
{
textWriter.Close();
}
}
|
Zobacz także