ssis kullanarak düz dosya hedefi için bir başlık oluşturun

Saat başı planlanmış bir ssis paketim var ve bu paket her seferinde düz bir dosya (metin dosyası) üretiyor.

Oluşturulan bu düz dosyaların her biri için bir başlık oluşturmanın bir yolu var mı?

I am thinking to use 'UNION' to merge two flat files (header & body), however I cannot control which file would go first.

Düşüncesi olan var mı?

2

6 cevap

Bağlantı Yöneticisi'ndeki bağlantıya tıklayın ve "ColumnNamesInFirstDataRow" = Doğru olarak ayarlayın.

3
katma
Tam ihtiyacım olan şey, teşekkürler!
katma yazar James Vaughn III, kaynak

Tercihinize bağlı olarak bu daha basit olabilir:

  1. Başlığınızla bir metin dosyası oluşturun
  2. Bir yürütme işleminde şunu çalıştırın: COPY HeaderFile.TXT + InputFile.TXT OUTPUT.TXT dosyaları birbirine yapıştırmak için

Dosyanın sonunda bir ok karakteri alırsanız bunun yerine şunu kullanın:

COPY/B HeaderFile.TXT + InputFile.TXT ÇIKIŞI.TXT

(bkz. ok → karakter bir .bat betiğindeki dosyalara ekleniyor )

2
katma
Bu merak ediyor ... ve orijinal dosyada ok simgesi yok mu? Ascii kodlarını bir metin editöründe kontrol ederseniz hangi karakter olur? Hangi metin editörünü görüntülemek için kullanıyorsunuz?
katma yazar Nick.McDermaid, kaynak
Buna göre: stackoverflow.com/questions/6313960/… için /B kullanmanız gerekir. kopyala komutu. Yanıtı buna göre düzenleyeceğim
katma yazar Nick.McDermaid, kaynak
İşlem Yürütme Görevinin içeriğini bir ifadeyle doldurabilirsiniz. Bunu yapmana izin verecek. Bir noktada bir komut dosyası kullanmak daha iyi olabilir ama ben çok iyi olduğunu düşünüyorum.
katma yazar Nick.McDermaid, kaynak
Bu yöntemi denedim, ama çıktının sonunda bir ok simgesi var gibi görünüyor?
katma yazar ryan, kaynak
teşekkürler,/B ile çalışır. Teşekkürler.
katma yazar ryan, kaynak
Tek utanç, bu yöntemin dinamik olarak çıktı dosyası adını oluşturamamasıdır. Yarasa dosyasında adı belirtmem gerekiyor mu?
katma yazar ryan, kaynak

Veri akışının özelliklerini de kullanabilirsiniz.

Kontrol sayfasına git Veri Akışı bileşeninin özellikler panosunu seçin İfadeler bölümüne gidin ve [Düz Dosya Hedefi] 'ni seçin. [Başlık] Burada, bu özelliğin değerini dinamik olarak ayarlayabilir veya

0
katma

Kesinlikle. Bir script bileşenini kullanmak, bulmamın en kolay yoludur. İstediğim verileri bir metin dosyasına düz bir dosya hedefi kullanarak yazdıktan sonra oynuyordum, daha sonra bir üstbilgi ve altbilgi eklemek için bir komut dosyası görevi kullandım. İstersen bunu yapabilirsin.

Bunu sadece bir adımda yapmanın daha kolay olduğunu gördüm, yani veri akışınızı, PreExecute içinde üstbilgiyi yazan bir komut dosyası görevine ve tüm veri satırlarını ProcessInputRow'da ve isteğe bağlı olarak PostExecute'ta bir altbilgiye yönlendirin.

Bunun gibi bir şey;

TextWriter tw;

public override void PreExecute()
{
    base.PreExecute();
    tw = new StreamWriter(Variables.requestFname);
    tw.WriteLine("HEADER");
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    tw.WriteLine(Row.WhateverFieldsYouNeed);
}

public override void PostExecute()
{
    base.PostExecute();
    tw.WriteLine("FOOTER");
    tw.Close();
}
0
katma
SSIS'de, bir tablodan seçim yapmak ve verileri Nesne türündeki bir değişkene boşaltmak gibi dinamik durumlarla başa çıkmak için kullanabileceğiniz bir Nesne türü değişkeni vardır.
katma yazar 40Alpha, kaynak
Tabii ki. "HEADER", ihtiyacınız olan dinamik başlık için sadece bir yer tutucudur. Örneğin, dosyanın nerede yazılacağını belirlemek için Variables.requestFname öğesini kullandığım gibi, SSIS'de üstbilgiyi temsil etmek üzere başka bir dize değişkeni oluşturabilirsiniz. Bu değerlendirme çalışma zamanında bir ifadeye sahip olabilir ve kodumdaki "HEADER" ifadesini Variables.HeaderVariable ile değiştirebilirsiniz. Mantıklı olmak?
katma yazar CustodianOfCode, kaynak
teşekkürler, ancak başlık her zaman dinamik olarak değişir
katma yazar ryan, kaynak
Evet, bunu daha sonra deneyeceğim. Ancak, 'başlık' 255'ten fazla karakter içeriyor ve değişkene sarılıp sarılmayacağından emin değilim?
katma yazar ryan, kaynak

Bunu iki ayrı veri akışı görevi oluşturarak başardım. İlki verileri alır ve toplar ve ilk üstbilgi kaydını yapmak için ek alanlara ekler. İkinci görev, satırlara bağımsız meta verilerini ekler. Hile, ilk düz dosya hedefinde, önceki dosyanın üzerine yazmış ve ikinci hedefte aynı dosyayı kullanmış, ancak üzerine yazılan verilerin işaretini kaldırmışsınız. Dosya adı dinamikse, dosya adını genel bir değişken olarak ayarlayabilir ve başlangıçta ve zaman damgalı dosya adını başlatabilir ve ardından değişkeni hedef dosya adı olarak kullanabilirsiniz.

0
katma

SSIS'imde Header adlı Özel Özellikler altında bir özellik var. Benim için harika çalıştı.
* sadece [Flat File Destination]. [Header] özelliği ile bir ifade kullanabileceğinizi ve Veri Akışı görevindeki bir değişkene ayarlayabileceğinizi keşfetti.

0
katma
Bilginize: Bu seçenek sadece özellikle Veri Akışı görevi için ifadeleri görüntülerken seçenekler listesinde görünür. Bu, düz dosya hedef nesnesini sağ tıklatıp özellikleri/ifadeleri görüntülediğinizde görünmez, ancak yalnızca görevin kendisinin özelliklerini sağ tıklayıp açarsanız görünmez. Bu işi yapmaya çalışırken bu beni bir süre daha önce yakaladı.
katma yazar Dinglemeyer NeverGonnaGiveUUp, kaynak