จัดเก็บ MSSQL Database ลง GitHub ด้วย Visual Studio 2017
Visual Studio มี Tool นึงชื่อว่า Sql Server Data Tools (SSDT) ที่มีความสามารถในการ Export Database จาก Microsoft SQL Server ออกมาอยู่ในรูปของ SQL Scripts
ข้อดีคือเรานำ SQL Scripts ไปเก็บลงใน GitHub เพื่อทำ Source Control ในการควบคุม Changes ที่เกิดขึ้น รวมถึงยังสามารถนำไป Apply ยัง Database อื่นๆได้อีกด้วยครับ
ขั้นตอน
- ติดตั้ง Programs ที่เกี่ยวข้อง
- จัดเตรียม Databases
- Export Source Database to SQL Server Database Project With Visual Studio
- แก้ไข Source Database และเก็บการเปลี่ยนแปลงที่เกิดขึ้นลง Database Project
- นำการแก้ไขใน Database Project ไปติดตั้งยัง Destination Database
- Compare Schema ของ Source & Destination Database
- Bonus — Compare Diff Records ของทั้ง Source & Destination Database
ติดตั้ง Programs ที่เกี่ยวข้อง
- ติดตั้ง Visual Studio 2017 Community Edition — เพื่อใช้งาน Sql Server Data Tools
2. ติดตั้ง MSSQL 2016 Express — Database Server ที่จะทดลองใช้
3. ติดตั้ง SQL Server Management Studio 18.1 — Client Tool สำหรับการต่อ Database Server
4. Download A Sample Database — ตัวอย่าง Database AdventureWorksLT2016.bak จาก Microsoft
จัดเตรียม Databases
ขั้นตอนนี้จะเป็นการเตรียม Database ทั้งหมด 2 Databases เพื่อใช้จำลองสถานะการที่เรามีการแก้ไข Database จากเครื่องนึง และต้องการนำไป Update ที่อีกเครื่องนึงครับ
เราจะตั้งชื่อ Databases ดังนี้น่ะครับ
- AdventureWorksLT2016.Source — เป็น Database ต้นทาง ที่จะถูกแก้ไข
- AdventureWorksLT2016.Destination — เป็น Database ปลายทาง ที่จะถูกนำการแก้ไขจาก AdventureWorksLT2016.Source มาติดตั้ง
เริ่ม Restore Database
- เปิด SQL Server Management Studio > ต่อ Database > เปิด Object Explorer
- Click ขวาที่ Databases > เลือก Restore Database
- เลือก Device เพื่อ Restore Database จาก Backup File > กด … > กด Add > เลือก Path ที่มี Backup File
ตั้งชื่อใหม่ให้กับ Database แล้วกด OK
ทำแบบนี้สองรอบเพื่อให้ได้ Source และ Destination Databases
Export Source Database to SQL Server Database Project With Visual Studio
ขั้นตอนนี้จะเป็นการ Export database ให้อยู่ในรูปแบบของ SQL Scripts ด้วย Visual Studio
- เปิด Visual Studio > กด View > กด SQL Server Object Explorer
***ในกรณีที่ไม่พบ SQL Server Object Explorer ให้ดูวิธีการตั้งเพิ่มเติม***
- Click ขวาที่ SQL Server > กด Add SQL Server > เลือก SQL Server > กด Connect
- ในขั้นตอนนี้เราจะสามารถเชื่อม Database เข้ากับ Visual Studio เรียบร้อยแล้ว
- Click ขวาที่ AdventureWorksLT2016.Source > เลือก Create New Project…
- ตั้งชื่อ Project > ระบุ Path > กด Start และรอจนทำงานเสรํจสิ้น
- ที่ Solution Explorer เราจะได้ Database Project มาเรียบร้อยแล้ว ซึ่งจะแบ่งตาม Schema และข้อมูลต่างๆจะอยู่ในรูปแบบของ SQL Script File (.sql)
- ในขั้นตอนนี้เราสามารถนำ Code ของเราเก็บไว้ใน GitHub ได้แล้วครับ ผมแชร์ตัวอย่าง Project ที่ผมเก็บไว้ใน GitHub ตามนี้ครับ
แก้ไข Source Database และเก็บการเปลี่ยนแปลงที่เกิดขึ้นลง Database Project
ในขั้นตอนนี้เราจะทำการทดลองแก้ไข Source Database ผ่าน Studio Management และ นำผลลัพธ์ที่เกิดขึ้นเก็บลงไปยัง Database Project ใน Visual Studio และ Deploy ขึ้น Git
- เปิด SQL Server Management Studio > เปิด Database AdventureWorksLT2016.Source
- ทดลองเพิ่ม Fields ในบาง Table, เพิ่ม Table ใหม่, แก้ไข Stored Procedure, ลบ Function
- หลังจากนั้นให้กลับไปที่ Visual Studio > SQL Server Object Explorer > DB Server
- Click ขวาที่ AdventureWorksLT2016.Source > Schema Comapre… > Select Target… > เลือก Project > Database Project
- กด Compare และรอผลลัพธ์
- เราจะพบว่า Tool แสดงผลความเปลี่ยนแปลงที่เกิดขึ้นทั้งการ เพิ่ม, แก้ไข, ลบ ที่เกิดขึ้น ซึ่งถ้าเรากดดูแต่ละ Row ก็จะเห็นรายละเอียดของการเปลี่ยนแปลง ซึ่ง Highlight เป็นสีเหลืองสำหรับข้อมูลที่แก้ไข และ Highlight เป็นสีแดงสำหรับข้อมูลที่ถูกลบ
- กด Update เพื่อ Apply Changes ที่เกิดขึ้นจาก Source Database ไปยัง Database Project
- Commit Change ขึ้น GitHub
นำการแก้ไขใน Database Project ไปติดตั้งยัง Destination Database
ในขั้นตอนนี้เราจะทำการนำผลลัพธ์ของการแก้ไขที่อยู่ใน Database Project เพื่อ Deploy ไปยัง Destination Database
- Visual Studio > Solution Explorer
- Click ขวาที่ Database Project > Schema Compare… > Select Target Destination Database > กด Compare
- เราจะได้ผลลัพธ์ที่คล้ายกันกับในขั้นตอนก่อนหน้านี้ เพียงแต่จะเปลี่ยนจากการ
Compare Source Database > Database Project มาเป็น
Compare Database Project > Destination Database
- ให้ทำการกด Update เพื่อ Apply Changes ที่เกิดขึ้นจาก Database Project ไปยัง Destination Database ก็จะจบขั้นตอน
- สามารถ Preview เพื่อดูขั้นตอนที่เกิดขึ้น
- ดู SQL Scripts ที่เกิดขึ้น
- ดู Message Result ที่เกิดขึ้น
Compare Schema ของ Source & Destination Database
ในขั้นตอนนี้เราจะวัดผลของการเปลี่ยนแปลงจาก
Source Database > Database Project > Destination Database
ว่าทำงานถูกต้องไหม ถ้าถูกต้อง Source & Destination Database ต้องมี Schema ที่เท่ากัน
- Visual Studio > SQL Server Object Explorer > DB Server
- Click ขวาที่ AdventureWorksLT2016.Source > Schema Comapre… > Select Destination Database > กด Compare
- เราจะพบว่าผลลัพธ์ที่ได้ของทั้ง Source & Destination Database นั้นมี Schema ที่เท่ากันแล้วครับ แสดงว่าการ Apply Change ของเราทำงานได้ถูกต้อง
Bonus — Compare Diff Records ของทั้ง Source & Destination Database
ในขั้นตอนนี้อยากเสนออีก 1 Feature ที่ยอดเยี่ยมของ SSDT นั้นคือการตรวจสอบความแตกต่างของข้อมูลระหว่าง Database ครับ
- ลบ Records ใน Source Database
- Visual Studio > SQL Server Object Explorer > DB Server
- Click ขวาที่ AdventureWorksLT2016.Source > Data Comparison… > Select Destination Database > กด Finish
- ผลลัพธ์ที่ได้เราจะเห็นว่า Records ถูกลบออกจาก Source Database และมีอยู่แค่ใน Destination Database เท่านั้น
- ถ้าเรา Deploy Change ที่เกิดขึ้นนี้ไปยัง Destination Database จะกลายเป็นการ ลบ Records ที่ Destination Database
สรุป
Sql Server Data Tools (SSDT) มีความสามารถที่ทำให้เราทำงานกับ Database ได้สะดวกมากขึ้น เพราะเราสามารถทำ Source Code Control ให้กับ Database ได้ รวมถึงยัง Deploy Changes ที่เกิดขึ้นจาก Database นึงไปยังอีก Database นึงได้ และยังช่วยเปรียบเทียบความแตกต่างของข้อมูลในแต่ล่ะ Database ได้ด้วยครับ ก็หวังว่า Tool นี้จะช่วยให้งานเราง่ายขึ้นน่ะครับ ^ ^
Source Code
อ้างอิง
Happy Coding
นายป้องกัน