การสร้าง SSIS Package ให้มีความ Dynamic อย่างง่าย

การสร้าง SSIS Package ให้มีความ Dynamic ใช้เมื่อมีความต้องการสร้าง Package ที่มีการทำงานเหมือนกัน แต่อาจกระทำกับแหล่งข้อมูลที่แตกต่างกันไปเพียงเท่านั้น
หากเป็นแบบนี้เราอาจเอาตั้งชื่อหรือส่วนประกอบอื่นใดของ Package ให้สอดคล้องกับแหล่งข้อมูล แล้วนำเอาสิ่งนั้นไปกำหนดค่าให้กับตัวแปร เพื่อใช้ใน Package หรือนำไปกำหนดเป็น Property Expression ใน Component ต่างๆ ต่อไป
ก่อนอื่นผู้เขียนสร้าง SSIS Project ขึ้นมาใหม่ แล้ววาง Script Task (ในส่วนของ Control Flow) ลงไป
หากเป็นแบบนี้เราอาจเอาตั้งชื่อหรือส่วนประกอบอื่นใดของ Package ให้สอดคล้องกับแหล่งข้อมูล แล้วนำเอาสิ่งนั้นไปกำหนดค่าให้กับตัวแปร เพื่อใช้ใน Package หรือนำไปกำหนดเป็น Property Expression ใน Component ต่างๆ ต่อไป
ก่อนอื่นผู้เขียนสร้าง SSIS Project ขึ้นมาใหม่ แล้ววาง Script Task (ในส่วนของ Control Flow) ลงไป

จากนั้นผู้เขียนคลิกขวาในพื้นที่ว่าง ๆ ในส่วนของ Design Pane แล้วเลือกไปที่ Variables จะปรากฏ Dialog ดังรูป

ผู้เขียนตั้งใจสร้างตัวแปรชื่อ vDirectory ขึ้นมาเพื่อกำหนดตำแหน่งที่อยู่ของไฟล์ (Flat File) ต้นทางที่จะนำเข้าข้อมูล
โดยผู้เขียนจะนำเอาตัวแปรนี้ไปต่อด้วย ตัวแปรระบบ (System Variables) ชื่อ PackageName และตามด้วยนามสกุล .DAT แล้วนำเอาผลลัพธ์ที่ได้ใส่ลงในตัวแปรชื่อ vFileLocation ที่เตรียมไว้
ขั้นตอนต่อมาผู้เขียนดับเบิลคลิกที่ Script Task จะปรากฏ Dialog ดังรูป
โดยผู้เขียนจะนำเอาตัวแปรนี้ไปต่อด้วย ตัวแปรระบบ (System Variables) ชื่อ PackageName และตามด้วยนามสกุล .DAT แล้วนำเอาผลลัพธ์ที่ได้ใส่ลงในตัวแปรชื่อ vFileLocation ที่เตรียมไว้
ขั้นตอนต่อมาผู้เขียนดับเบิลคลิกที่ Script Task จะปรากฏ Dialog ดังรูป

ผู้เขียนเลือกที่จะให้ Script Task นี้ใช้ภาษา Visual Basic และให้อ่านค่าจาก ตัวแปร PackageName และ vDirectory และสามารถเขียนลงตัวแปร vFileLocation ตามที่ได้อธิบายไว้ก่อนหน้า ในส่วนของ Script มีเนื้อหาดังนี้ (กดปุ่ม Edit Script…)

การสร้าง SSIS Package นั้นกระทำบน Visual Studio ซึ่งมีเครื่องไม้เครื่องมือในการพัฒนา รวมถึงการดีบักที่มีให้พร้อมแล้ว
เราจึงสามารถกำหนด Breakpoint เพื่อหยุด Flow การทำงานของ Package ตามจังหวะการทำงานในแต่ละ Task ได้
ในที่นี้เรามาลองหยุด Flow การทำงานของ Script Task หลัง Execute เสร็จกัน
โดยทำการคลิกขวาที่ Script Task และเลือก Set Breakpoint จากนั้นกำหนดเงื่อนไขการ Break ดังรูป
เราจึงสามารถกำหนด Breakpoint เพื่อหยุด Flow การทำงานของ Package ตามจังหวะการทำงานในแต่ละ Task ได้
ในที่นี้เรามาลองหยุด Flow การทำงานของ Script Task หลัง Execute เสร็จกัน
โดยทำการคลิกขวาที่ Script Task และเลือก Set Breakpoint จากนั้นกำหนดเงื่อนไขการ Break ดังรูป

จากนั้นทำการเอ็กซีคิว SSIS Package จะเห็นว่า Package จะหยุดรอหลัง Script Task รันเสร็จไปแล้ว
ให้เลือก Watch Windows จากเมนู Debug แล้วกำหนดค่าตัวแปรที่ต้องการรู้ค่าปัจจุบัน
ซึ่งในที่นี้คือ vFileLocation จะเป็นว่ามีค่าเป็น “C:\test_dir\ABC.DAT” ในที่นี้ Package ของเราชื่อ ABC (ABC.dtsx)
ก็แสดงว่า Script ของเราทำงานถูกต้อง หากเราเป็นชื่อ Package ไปเป็นชื่ออื่น ชื่อไฟล์ที่จะนำเข้าก็จะเปลี่ยนตามไปด้วยนั่นเอง
ให้เลือก Watch Windows จากเมนู Debug แล้วกำหนดค่าตัวแปรที่ต้องการรู้ค่าปัจจุบัน
ซึ่งในที่นี้คือ vFileLocation จะเป็นว่ามีค่าเป็น “C:\test_dir\ABC.DAT” ในที่นี้ Package ของเราชื่อ ABC (ABC.dtsx)
ก็แสดงว่า Script ของเราทำงานถูกต้อง หากเราเป็นชื่อ Package ไปเป็นชื่ออื่น ชื่อไฟล์ที่จะนำเข้าก็จะเปลี่ยนตามไปด้วยนั่นเอง

ผู้เขียนจะนำไปใช้ประโยชน์โดยกำหนดเป็น Property Expression ให้กับ Connection ชนิด Flat File
โดยผู้เขียนทำการสร้าง Connection ขึ้นมาผ่านทาง Connection Manager Pane ดังรูป
โดยผู้เขียนทำการสร้าง Connection ขึ้นมาผ่านทาง Connection Manager Pane ดังรูป

โดยตั้งชื่อให้เป็น “Flat_File_CONN” จากนั้นคลิกขวาเลือก Property มองหา ในส่วน Expressions (จะสามารถกำหนดค่าของตัวแปรให้กับ Property ต่างๆ ได้)
ในที่นี้ผู้เขียนกำหนดค่าของตัวแปร vFileLocation ให้กับ Property ชื่อ ConnectionString ไปตรงๆ

จากตัวอย่างเป็นการสร้าง SSIS Package ให้มีความ Dynamic อย่างง่ายๆ
หากลองทดลองทำดู ก็จะสามารถต่อยอดใช้งานได้อีกมากมายครับ
หากลองทดลองทำดู ก็จะสามารถต่อยอดใช้งานได้อีกมากมายครับ
บทความโดย
อาจารย์ภัคพงศ์ กฤตวัฒน์
วิทยากรดูแลและออกแบบหลักสูตร
กลุ่มวิชา SQL Server/Window Server