Aracılığıyla paylaş


Komut dosyası bileşeni ile biçimleri olan Non-Standard metin dosyası ayrıştırılıyor.

Kaynak verileriniz standart olmayan bir biçimde düzenlenmiş, size tüm, ayrıştırma mantığını birlikte zincir daha tek bir komut dosyasında birleştirmek daha kolay gelebilir birden çokIntegration Servicesdönüştürmeleri için elde aynı sonucu.

Örnek 1: Satır sınırlı kayıt ayrıştırma

Örnek 2: Bölmenin üst ve alt kayıtlar

Not

Birden çok veri akışı görevi ve birden çok paket daha kolay yeniden kullanabileceğiniz bir bileşen oluşturmak isterseniz, kodu bu komut dosyası bileşen örneğinde başlangıç noktası olarak bir özel veri akışı bileşeni kullanabilirsiniz.Daha fazla bilgi için bkz:Özel veri akışı bileşen geliştirme.

Örnek 1: Satır sınırlı kayıt ayrıştırma

Bu örnek gösterir, her veri sütun görünür ayrı bir satıra bir metin dosyası almak için ve çözümleme, bir hedef tabloya kullanarak komut dosyası bileşeni.

Bileşen için dönüştürme veri akışı olarak, bkz: komut dosyasını yapılandırma hakkında daha fazla bilgi içinZaman uyumlu bir dönüştürme komut dosyası bileşeni ile oluşturmaveZaman uyumsuz bir dönüştürme komut dosyası bileşeni ile oluşturma.

Bu komut dosyası bileşeni örneği yapılandırmak için

  1. Oluşturma adlı bir metin dosyasına kaydediprowdelimiteddata.txt Aşağıdaki kaynak verileri içeren:

    FirstName: Nancy
    LastName: Davolio
    Title: Sales Representative
    City: Seattle
    StateProvince: WA
    
    FirstName: Andrew
    LastName: Fuller
    Title: Vice President, Sales
    City: Tacoma
    StateProvince: WA
    
    FirstName: Steven
    LastName: Buchanan
    Title: Sales Manager
    City: London
    StateProvince:
    
  2. AçıkManagement Studiobağlanmak ve bir örnek,SQL Server.

  3. Hedef veritabanını seçin ve yeni bir sorgu penceresi açın.Sorgu penceresinde yürütmek hedef tablo oluşturmak için aşağıdaki komut dosyası:

    create table RowDelimitedData
    (
    FirstName varchar(32),
    LastName varchar(32),
    Title varchar(32),
    City varchar(32),
    StateProvince varchar(32)
    )
    
  4. AçıkBI Development Studiove yeni oluşturIntegration Servicespaket adı ParseRowDelim.dtsx.

  5. Bir düz dosya Bağlantı Yöneticisi paket ekleme, RowDelimitedData olarak adlandırın ve bir önceki adımda oluşturduğunuz rowdelimiteddata.txt dosyasına bağlanmak için yapılandırın.

  6. Bir OLE DB Bağlantı Yöneticisi paket ekleyin ve bağlanmak için yapılandırın örnek,SQL Serververitabanı, oluşturduğunuz hedef tablo.

  7. Bir Data Flow görevi paket ve tıklatınVeri akışı SSIS Tasarımcısı. sekmesi

  8. düz dosya Ekle kaynak için veri akışı ve RowDelimitedData Bağlantı Yöneticisi'ni kullanmak üzere yapılandırın.,Sütunlar sayfa seçin Düz dosya Kaynak Düzenleyicisi tek kullanılabilir dış sütun.

  9. Veri akışı için bir komut dosyası bileşeni ekleme ve dönüştürme yapılandırın.Düz dosya çıktısı bağlanmak kaynak komut dosyası bileşeni.

  10. Görüntülemek için komut dosyası bileşeni çift tıklatınKomut dosyası dönüştürme Düzenleyicisi.

  11. ,Giriş sütunlar sayfa seçin Kod dönüştürme Düzenleyicisi tek kullanılabilir giriş sütun.

  12. ,Giriş ve çıkışları sayfa Dönüştürme komut dosyası Düzenleyicisi'ni, çıkış 0'ı seçin ve ayarlayın, SynchronousInputID0.Tüm uzunluğu 32 olan [DT_STR] dize türünde 5 çıktı sütunu oluşturun:

    • Ad

    • Soyad

    • Başlık

    • Şehir

    • StateProvince

  13. ,Komut dosyası sayfa Dönüştürme komut dosyası Düzenleyicisi'ni, Komut dosyası Düzenle ' yi tıklatın ve ScriptMainsınıf örneği. gösterilen kodu girin Komut dosyası geliştirme ortamı kapatın veKomut dosyası dönüştürme Düzenleyicisi.

  14. SQL Server hedef veri akışı için ekleyin.OLE DB Bağlantı Yöneticisi ve RowDelimitedData kullanmak üzere yapılandırma tablo.Komut dosyası bileşeni çıkışını bu hedef bağlantı.

  15. paket çalıştırın.paket tamamladıktan sonra kayıtları incelemekSQL ServerHedef tablo.

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

        Dim columnName As String
        Dim columnValue As String

        ' Check for an empty row.
        If Row.Column0.Trim.Length > 0 Then
            columnName = Row.Column0.Substring(0, Row.Column0.IndexOf(":"))
            ' Check for an empty value after the colon.
            If Row.Column0.Substring(Row.Column0.IndexOf(":")).TrimEnd.Length > 1 Then
                ' Extract the column value from after the colon and space.
                columnValue = Row.Column0.Substring(Row.Column0.IndexOf(":") + 2)
                Select Case columnName
                    Case "FirstName"
                        ' The FirstName value indicates a new record.
                        Me.Output0Buffer.AddRow()
                        Me.Output0Buffer.FirstName = columnValue
                    Case "LastName"
                        Me.Output0Buffer.LastName = columnValue
                    Case "Title"
                        Me.Output0Buffer.Title = columnValue
                    Case "City"
                        Me.Output0Buffer.City = columnValue
                    Case "StateProvince"
                        Me.Output0Buffer.StateProvince = columnValue
                End Select
            End If
        End If

    End Sub
public override void Input0_ProcessInputRow(Input0Buffer Row)
    {

        string columnName;
        string columnValue;

        // Check for an empty row.
        if (Row.Column0.Trim().Length > 0)
        {
            columnName = Row.Column0.Substring(0, Row.Column0.IndexOf(":"));
            // Check for an empty value after the colon.
            if (Row.Column0.Substring(Row.Column0.IndexOf(":")).TrimEnd().Length > 1)
            // Extract the column value from after the colon and space.
            {
                columnValue = Row.Column0.Substring(Row.Column0.IndexOf(":") + 2);
                switch (columnName)
                {
                    case "FirstName":
                        // The FirstName value indicates a new record.
                        this.Output0Buffer.AddRow();
                        this.Output0Buffer.FirstName = columnValue;
                        break;
                    case "LastName":
                        this.Output0Buffer.LastName = columnValue;
                        break;
                    case "Title":
                        this.Output0Buffer.Title = columnValue;
                        break;
                    case "City":
                        this.Output0Buffer.City = columnValue;
                        break;
                    case "StateProvince":
                        this.Output0Buffer.StateProvince = columnValue;
                        break;
                }
            }
        }

    }

Örnek 2: Bölmenin üst ve alt kayıtlar

Bu örnek, ayırıcı satır belirsiz sayıda tarafından alt kayıt satır sonunda bir üst kayıt satır etiketinden önce bir metin dosyasına alıp, doğru normalleştirilmiş üst ve alt hedef tablolar halinde komut dosyası bileşeni'ni kullanarak çözümleme gösterilmiştir.Her kaydın başlangıç ve tanımlamak için birkaç yol var olduğu sürece bu basit örnek kolayca her üst ve alt kayıt için birden fazla satır veya sütun kullanan kaynak dosyaları için Cicero'nun.

Uyarı

Bu örnek yalnızca gösterim amacıyla hazırlanmıştır.Örnek bir kereden fazla çalıştırırsanız, yinelenen anahtar değerleri hedef tabloya ekler.

Bileşen için dönüştürme veri akışı olarak, bkz: komut dosyasını yapılandırma hakkında daha fazla bilgi içinZaman uyumlu bir dönüştürme komut dosyası bileşeni ile oluşturmaveZaman uyumsuz bir dönüştürme komut dosyası bileşeni ile oluşturma.

Bu komut dosyası bileşeni örneği yapılandırmak için

  1. Oluşturma adlı bir metin dosyasına kaydedipparentchilddata.txt Aşağıdaki kaynak verileri içeren:

******** PARENT 1 DATA child 1 data child 2 data child 3 data child 4 data ******** PARENT 2 DATA child 5 data child 6 data child 7 data child 8 data ********

  1. AçıkSQL Server Management Studiobağlanmak ve bir örnek,SQL Server.

  2. Hedef veritabanını seçin ve yeni bir sorgu penceresi açın.Sorgu penceresinde hedef tablo oluşturmak için aşağıdaki komut dosyasını yürütün:

    CREATE TABLE [dbo].[Parents](
    [ParentID] [int] NOT NULL,
    [ParentRecord] [varchar](32) NOT NULL,
     CONSTRAINT [PK_Parents] PRIMARY KEY CLUSTERED 
    ([ParentID] ASC)
    )
    GO
    CREATE TABLE [dbo].[Children](
    [ChildID] [int] NOT NULL,
    [ParentID] [int] NOT NULL,
    [ChildRecord] [varchar](32) NOT NULL,
     CONSTRAINT [PK_Children] PRIMARY KEY CLUSTERED 
    ([ChildID] ASC)
    )
    GO
    ALTER TABLE [dbo].[Children] ADD CONSTRAINT [FK_Children_Parents] FOREIGN KEY([ParentID])
    REFERENCES [dbo].[Parents] ([ParentID])
    
  3. AçıkBusiness Intelligence Development Studiove yeni oluşturIntegration Servicespaket adı SplitParentChild.dtsx.

  4. Bir düz dosya Bağlantı Yöneticisi paket ekleme, ParentChildData olarak adlandırın ve bir önceki adımda oluşturduğunuz parentchilddata.txt dosyasına bağlanmak için yapılandırın.

  5. Paket için bir OLE DB Bağlantı Yöneticisi ekleme ve yapılandırma örneğine bağlanmak içinSQL Serververitabanı, oluşturduğunuz hedef tablolar.

  6. Bir Data Flow görevi paket ve tıklatınVeri akışı SSIS Tasarımcısı. sekmesi

  7. düz dosya kaynağı için veri akışı eklemek ve ParentChildData Bağlantı Yöneticisi'ni kullanmak üzere yapılandırın.,Sütunlar sayfa seçin Düz dosya Kaynak Düzenleyicisi tek kullanılabilir dış sütun.

  8. Veri akışı için bir komut dosyası bileşeni ekleme ve dönüştürme yapılandırın.Düz dosya çıktısı bağlanmak kaynak komut dosyası bileşeni.

  9. Görüntülemek için komut dosyası bileşeni çift tıklatınKomut dosyası dönüştürme Düzenleyicisi.

  10. ,Giriş sütunlar sayfa seçin Kod dönüştürme Düzenleyicisi tek kullanılabilir giriş sütun.

  11. ,Giriş ve çıkışlarıDönüştürme komut dosyası Düzenleyicisi'ni, sayfanın çıktısı 0'ı seçin, ParentRecords için yeniden adlandırın ve küme, SynchronousInputIDyok.2 Çıktı sütunu oluşturun:

    • Tür dört bayt işaretli tamsayı [DT_I4], ParentID (birincil anahtar)

    • Uzunluğu 32 olan [DT_STR] dize türünde ParentRecord.

  12. İkinci bir çýktý yaratmak ve ChildRecords olarak adlandırın.The SynchronousInputID of the new output is already set to None.3 Çıktı sütunu oluşturun:

    • Tür dört bayt işaretli tamsayı [DT_I4], ChildID (birincil anahtar)

    • Ayrıca türü dört bayt işaretli tamsayı [DT_I4], ParentID (yabancı anahtar),

    • ChildRecord uzunluğu 50 olan [DT_STR] dize türünde

  13. ,Komut dosyası sayfa Kod dönüştürme DüzenleyicisiKomut dosyası Düzenleseçeneğini tıklatın.,ScriptMainsınıf, örnek. gösterilen kodu girinKomut dosyası geliştirme ortamı kapatın veKomut dosyası dönüştürme Düzenleyicisi.

  14. SQL Server hedef veri akışı için ekleyin.Bu hedef.Configure için komut dosyası bileşeni ParentRecords çıkışını bağlanmak, OLE DB Bağlantı Yöneticisi ve Ebeveyn tablo.

  15. Başka bir SQL Server hedef veri akışı için ekleyin.Komut dosyası bileşeni ChildRecords çıkışını bu hedef bağlantı.OLE DB Bağlantı Yöneticisi ve alt tablo kullanmak üzere yapılandırın.

  16. paket çalıştırın.Sonra paket bitirdi, iki üst ve alt kayıtların inceleyinSQL ServerHedef tablo.

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

        Static nextRowIsParent As Boolean = False
        Static parentCounter As Integer = 0
        Static childCounter As Integer = 0

        ' If current row starts with separator characters,
        '  then following row contains new parent record.
        If Row.Column0.StartsWith("***") Then
            nextRowIsParent = True
        Else
            If nextRowIsParent Then
                ' Current row contains parent record.
                parentCounter += 1
                Me.ParentRecordsBuffer.AddRow()
                Me.ParentRecordsBuffer.ParentID = parentCounter
                Me.ParentRecordsBuffer.ParentRecord = Row.Column0
                nextRowIsParent = False
            Else
                ' Current row contains child record.
                childCounter += 1
                Me.ChildRecordsBuffer.AddRow()
                Me.ChildRecordsBuffer.ChildID = childCounter
                Me.ChildRecordsBuffer.ParentID = parentCounter
                Me.ChildRecordsBuffer.ChildRecord = Row.Column0
            End If
        End If

    End Sub
public override void Input0_ProcessInputRow(Input0Buffer Row)
    {

    int static_Input0_ProcessInputRow_childCounter = 0;
    int static_Input0_ProcessInputRow_parentCounter = 0;
    bool static_Input0_ProcessInputRow_nextRowIsParent = false;

        // If current row starts with separator characters, 
        // then following row contains new parent record. 
        if (Row.Column0.StartsWith("***"))
        {
            static_Input0_ProcessInputRow_nextRowIsParent = true;
        }
        else
        {
            if (static_Input0_ProcessInputRow_nextRowIsParent)
            {
                // Current row contains parent record. 
                static_Input0_ProcessInputRow_parentCounter += 1;
                this.ParentRecordsBuffer.AddRow();
                this.ParentRecordsBuffer.ParentID = static_Input0_ProcessInputRow_parentCounter;
                this.ParentRecordsBuffer.ParentRecord = Row.Column0;
                static_Input0_ProcessInputRow_nextRowIsParent = false;
            }
            else
            {
                // Current row contains child record. 
                static_Input0_ProcessInputRow_childCounter += 1;
                this.ChildRecordsBuffer.AddRow();
                this.ChildRecordsBuffer.ChildID = static_Input0_ProcessInputRow_childCounter;
                this.ChildRecordsBuffer.ParentID = static_Input0_ProcessInputRow_parentCounter;
                this.ChildRecordsBuffer.ChildRecord = Row.Column0;
            }
        }

    }
Integration Services icon (small)tümleştirme Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler, Microsoft Office 2010 Suite gelen video yanı sıra, seçilen topluluk çözümleri için ziyaret edin veIntegration ServicesMSDN veya TechNet sayfa:

Bu güncelleştirmeler otomatik bildirilmesi için sayfanın RSS akışlarını için abone olmak olun.