Saya memiliki pekerjaan SSIS yang dijadwalkan untuk dijalankan setiap 5 menit melalui SQL Agent. Pekerjaan mengimpor konten file excel ke tabel SQL. Itu semua berfungsi dengan baik, tetapi file ditempatkan di sana secara sporadis dan sering kali ketika pekerjaan berjalan tidak ada file sama sekali. Masalahnya adalah ini menyebabkan pekerjaan gagal dan mengirim email pemberitahuan bahwa pekerjaan gagal, tetapi saya hanya ingin diberi tahu jika pekerjaan gagal saat memproses file, bukan karena tidak ada file di sana sejak awal. Dari apa yang saya kumpulkan, saya dapat memperbaikinya dengan tugas skrip untuk memeriksa apakah file ada di sana sebelum pekerjaan berlanjut, tetapi saya belum bisa membuatnya berfungsi. Adakah yang bisa merinci cara kerja tugas skrip dan skrip seperti apa yang saya perlukan untuk memeriksa apakah ada file? Atau jika ada cara yang lebih baik untuk mencapai apa yang saya coba lakukan, saya juga terbuka untuk itu!

Kesalahan yang saya dapatkan ketika mencoba pendekatan Foreach Loop adalah

Excel is failing validation

1
Kelly Peterson 8 Januari 2020, 19:18

2 jawaban

Jawaban Terbaik

Ini dapat dilakukan dengan mudah dengan Foreach Loop Container di SSIS.

Sederhananya, wadah akan memeriksa direktori yang Anda tuju dan melakukan tugas di dalam wadah untuk setiap file yang ditemukan. Jika tidak ada file yang ditemukan, isi container tidak akan pernah dieksekusi. Pekerjaan Anda tidak akan gagal jika tidak ada file yang ditemukan. Ini akan menyelesaikan pelaporan keberhasilan.

Lihat intro posting blog untuk info lebih lanjut.

Pada gambar yang dilampirkan pertanyaan, kesalahan spesifik terkait dengan Validasi Sumber Excel yang gagal. Saat SSIS membuka paket untuk diedit atau dijalankan, hal pertama yang dilakukan adalah memvalidasi semua artefak yang diperlukan untuk menjalankan yang sukses tersedia dan sesuai dengan bentuk/API yang diharapkan. Karena file yang diharapkan mungkin tidak ada, klik kanan pada Excel Connection Manager dan di menu Properties, cari pengaturan untuk DelayValidation dan ubah ke True. Ini akan memastikan manajer koneksi hanya memvalidasi sumber daya yang tersedia jika paket benar-benar akan menggunakannya yaitu paket tersebut masuk ke Foreach Loop Container. Anda juga perlu menyetel DelayValidation yang sama ke True pada Tugas Aliran Data Anda.

4
billinkc 8 Januari 2020, 22:22

Anda tidak menyebutkan pendekatan skrip apa yang Anda terapkan untuk mencari file Anda. Saat menggunakan C# atau VB.NET adalah bahasa skrip khas yang digunakan dalam tugas kontrol skrip seperti ini, Anda juga dapat menggunakan TSQL yang hanya akan mengembalikan nilai boolean yang disimpan ke variabel pengguna (Kadang sistem membatasi penggunaan C# dan VB.NET) . Kemudian Anda menerapkan variabel pengguna tersebut dalam aliran kontrol untuk menentukan apakah akan mengimpor (boolean = 1) atau tidak (boolean = 0).

Lihatlah tautan berikut yang menunjukkan secara detail cara mengatur skrip TSQL yang memeriksa apakah ada file atau tidak. Periksa apakah ada file atau tidak di server sql?

Lihatlah tautan berikut yang menunjukkan cara menerapkan pemeriksaan bersyarat berdasarkan variabel pengguna boolean. Contoh ini juga menunjukkan cara menerapkan VB.NET dalam tugas skrip untuk menentukan apakah file tersebut ada (sebagai alternatif dari pendekatan TSQL yang disebutkan sebelumnya). http://sql-articles.com/articles/bi /file-exists-check-in-ssis/

Semoga ini membantu.

0
user3662215 8 Januari 2020, 17:14