สร้าง สร้าง และตรวจสอบความถูกต้องของโครงการฐานข้อมูล SQL
ก่อนที่คุณจะสามารถปรับใช้โดยอัตโนมัติเรียกใช้การทดสอบหรือตรวจจับการเบี่ยงเบนของสคีมาคุณต้องมีสิ่งที่ไปป์ไลน์สามารถสร้างได้จริง สิ่งนั้นเป็นโครงการฐานข้อมูล SQL
ทําความเข้าใจโครงการฐานข้อมูล SQL
ลองนึกถึงโครงการฐานข้อมูล SQL เป็นฐานข้อมูลของคุณในรูปแบบไฟล์ ทุกตาราง กระบวนงานที่เก็บไว้ มุมมอง และฟังก์ชันจะอยู่ในแฟ้มของตัวเอง.sql คุณประกาศแต่ละออบเจ็กต์เพียงครั้งเดียว และเมื่อคุณต้องการเพิ่มคอลัมน์หรือเปลี่ยนชนิดข้อมูล คุณจะแก้ไขไฟล์เดียวนั้น
หากคุณเคยทํางานกับสคริปต์การย้ายข้อมูลมาก่อน สคริปต์การย้ายข้อมูลเป็นแบบต่อเนื่อง คุณเขียนข้อความ ALTER หวังว่ามันจะทํางานในลําดับที่ถูกต้อง และสะสมห่วงโซ่การเปลี่ยนแปลงที่เพิ่มขึ้นเมื่อเวลาผ่านไป โครงการฐานข้อมูล SQL ใช้แนวทางตรงกันข้าม: คุณรักษาสถานะสิ้นสุดที่ต้องการของแต่ละวัตถุ และเครื่องมือจะคํานวณความแตกต่างระหว่างโครงการและฐานข้อมูลเป้าหมายในเวลาปรับใช้
เมื่อคุณสร้างโปรเจ็กต์ ผลลัพธ์ .dacpac จะเป็นไฟล์ ซึ่งเป็นโมเดลที่คอมไพล์ของสคีมาฐานข้อมูลทั้งหมดของคุณ คุณประกาศเพื่อสร้าง .dacpac ฐานข้อมูลใหม่ หรือปรับปรุงฐานข้อมูลที่มีอยู่ กระบวนการสร้างให้สองสิ่งที่สําคัญสําหรับ CI/CD:
- การตรวจสอบความถูกต้อง: การอ้างอิงวัตถุและไวยากรณ์ T-SQL จะถูกตรวจสอบกับ SQL เวอร์ชันเฉพาะก่อนที่จะปรับใช้สิ่งใด
-
สิ่งประดิษฐ์ที่ปรับใช้ได้: จะ
.dacpacกลายเป็นแพ็คเกจเดียวที่ไหลผ่านไปป์ไลน์ของคุณไปยังทุกสภาพแวดล้อม
เลือกระหว่างโปรเจ็กต์ดั้งเดิมและโปรเจ็กต์สไตล์ SDK
โครงการฐานข้อมูล SQL มีสองรูปแบบ รูปแบบ ดั้งเดิม ถูกสร้างขึ้นบน MSBuild (.NET Framework) และมาพร้อมกับ SQL Server Data Tools (SSDT) ใน Visual Studio รูปแบบ สไตล์ SDK สร้างขึ้นบน Microsoft.Build.Sql SDK ของโครงการ และเป็นรูปแบบที่ใช้โดยส่วนขยาย SQL Database Projects สําหรับ Visual Studio Code
สําหรับโปรเจ็กต์ใหม่ ให้ใช้รูปแบบ SDK มันนําความสามารถที่รูปแบบดั้งเดิมไม่มี:
- รองรับ .NET 8+ คุณจึงสามารถสร้างข้ามแพลตฟอร์มบน Windows, Linux และ macOS ได้ การสนับสนุนนี้มีความสําคัญเมื่อ CI runners ของคุณไม่ใช่เครื่อง Windows
- การอ้างอิงแพ็คเกจ NuGet สําหรับการอ้างอิงฐานข้อมูล ดังนั้นการจัดการการพึ่งพาจึงเป็นไปตามรูปแบบเดียวกับส่วนที่เหลือของระบบนิเวศ .NET
- ค่าเริ่มต้น globbing สําหรับ
.sqlไฟล์ วางไฟล์ในโฟลเดอร์โครงการและไฟล์นั้นจะรวมอยู่ในบิลด์โดยอัตโนมัติ ไม่จําเป็นต้องป้อนไฟล์ด้วยตนเอง
หากคุณมีโปรเจ็กต์ต้นฉบับอยู่แล้ว คุณสามารถแปลงเป็นรูปแบบ SDK ได้โดยการแก้ไข .sqlproj ไฟล์ ก่อนที่คุณจะแปลงโครงการ ให้สํารองไฟล์โครงการและเก็บถาวรจาก .dacpac โครงการปัจจุบัน เปรียบเทียบ "ก่อน" และ "หลัง" .dacpac เพื่อยืนยันการแปลงที่เก็บรักษาทุกอย่างไว้
Note
โปรเจ็กต์ SQL สไตล์ SDK โดยทั่วไปจะพร้อมใช้งานใน Visual Studio Code และในการแสดงตัวอย่างใน Visual Studio 2022 Visual Studio 2026 รองรับเฉพาะรูปแบบโครงการ SQL ดั้งเดิมเท่านั้น
สร้างและเติมข้อมูลโครงการ
คุณสามารถสร้างโครงการฐานข้อมูล SQL จาก Visual Studio Code, Visual Studio หรือบรรทัดคําสั่ง บรรทัดคําสั่งมีประโยชน์อย่างยิ่งสําหรับสถานการณ์ CI/CD ที่ไม่มีสภาพแวดล้อมแบบกราฟิก
วิธีสร้างโปรเจ็กต์สไตล์ SDK ใหม่
dotnet new sqlproj -n MyDatabaseProject
📝 การดําเนินการนี้จะสร้าง .sqlproj ไฟล์ที่มีรูปแบบ SDK จากที่นี่ คุณจะเพิ่มวัตถุฐานข้อมูลโดยการวาง .sql แฟ้มลงในโฟลเดอร์โครงการ รูปแบบ globbing เริ่มต้นจะหยิบขึ้นมาโดยอัตโนมัติ
ตัวอย่างเช่น เมื่อต้องการกําหนดตาราง ให้สร้าง Tables/Customers.sql:
CREATE TABLE [dbo].[Customers]
(
[CustomerID] INT NOT NULL PRIMARY KEY,
[FirstName] NVARCHAR(50) NOT NULL,
[LastName] NVARCHAR(50) NOT NULL,
[Email] NVARCHAR(100) NULL
);
เริ่มต้นด้วยฐานข้อมูลที่มีอยู่แล้วใช่ไหม เครื่องมือเปรียบเทียบ Schema ช่วยให้คุณสามารถเปรียบเทียบฐานข้อมูลที่ใช้งานจริงกับโครงการที่ว่างเปล่าและนําเข้าความแตกต่าง คุณจึงไม่ต้องสร้างวัตถุทุกชิ้นขึ้นมาใหม่ด้วยมือ
สร้างและตรวจสอบความถูกต้องของโครงการ
อาคารเป็นจุดเริ่มต้นของตาข่ายนิรภัย กระบวนการสร้างจะตรวจสอบความถูกต้องของการอ้างอิงอ็อบเจ็กต์ทั้งหมดและตรวจสอบไวยากรณ์ T-SQL กับแพลตฟอร์มเป้าหมาย หากมุมมองอ้างอิงคอลัมน์ที่ไม่มีอยู่ บิลด์จะล้มเหลว ถ้าคุณใช้ฟังก์ชันเวกเตอร์ที่เพิ่มเข้ามาใน SQL Server 2025 แต่โครงการของคุณกําหนดเป้าหมาย SQL Server 2017 (Sql140) บิลด์จะจับฟังก์ชันดังกล่าว
ในการสร้างจากบรรทัดคําสั่ง:
dotnet build MyDatabaseProject.sqlproj
📝 บิลด์จะ .dacpac สร้างไฟล์ใน bin/Debug โฟลเดอร์ตามค่าเริ่มต้น
เอาต์พุตบิลด์ประกอบด้วย ข้อผิดพลาด (ซึ่งบล็อกบิลด์) และ คําเตือน (เช่น ตัวพิมพ์ใหญ่ที่ไม่สอดคล้องกันในชื่อออบเจ็กต์) คําเตือนไม่ได้หยุดการสร้าง แต่ก็ควรค่าแก่การให้ความสนใจ คุณยังสามารถเปิดใช้งานกฎการวิเคราะห์โค้ด SQL เพื่อตั้งค่าสถานะการละเมิดแนวทางปฏิบัติที่ดีที่สุดในระหว่างการสร้าง โดยตรวจจับปัญหาต่างๆ เช่น ไวยากรณ์ SELECT * การรวมที่เลิกใช้แล้ว ในมุมมอง หรือคอลัมน์ที่ไม่ได้จัดทําดัชนีใน IN เพรดิเคต
แพลตฟอร์มเป้าหมายถูกตั้งค่าใน .sqlproj ไฟล์และควบคุมคุณสมบัติ T-SQL ที่ผ่านการตรวจสอบความถูกต้อง ตั้งค่าให้ตรงกับเป้าหมายการปรับใช้ของคุณ ไม่ว่าจะเป็น SQL Server 2025 หรือ Azure SQL Database
ปรับใช้โครงการ
เมื่อคุณมี .dacpacSqlPackage จะจัดการการปรับใช้ ติดตั้งเป็นเครื่องมือส่วนกลาง .NET:
dotnet tool install --global microsoft.sqlpackage
จากนั้นเผยแพร่ไปยังฐานข้อมูลเป้าหมาย:
sqlpackage /Action:Publish /SourceFile:bin/Debug/MyDatabaseProject.dacpac /TargetConnectionString:"Server=myserver.database.windows.net;Database=mydb;Authentication=Active Directory Default"
📝 SqlPackage เป็นข้ามแพลตฟอร์มและทํางานบน Windows, Linux และ macOS
สิ่งที่เกิดขึ้นระหว่างการปรับใช้ขึ้นอยู่กับเป้าหมาย สําหรับ ฐานข้อมูลใหม่ SqlPackage นําทางกราฟการขึ้นต่อกันของวัตถุ และสร้างแต่ละวัตถุในลําดับที่ถูกต้อง เช่น ตารางที่อ้างอิงก่อนคีย์นอก สําหรับ ฐานข้อมูลที่มีอยู่ จะคํานวณความแตกต่างระหว่าง Schema .dacpac และ Live จากนั้นสร้างเฉพาะ ALTER คําสั่งที่จําเป็นในการปิดช่องว่าง ขาดสองคอลัมน์? คุณได้รับหนึ่งรายการ ALTER TABLE ที่มีการเพิ่มทั้งสองอย่าง กระบวนการนี้เป็น idempotent ปรับใช้ห้าครั้งเดียวกัน .dacpac และการวิ่งครั้งที่ห้าจะไม่เปลี่ยนแปลงอะไรเลย คุณยังสามารถกระจายฐานข้อมูลเดียว .dacpac ในกลุ่มฐานข้อมูลเมื่ออัปเกรดผู้เช่าหลายราย
ก่อนปรับใช้โดยตรง คุณสามารถดูตัวอย่างการเปลี่ยนแปลงที่วางแผนไว้ได้:
sqlpackage /Action:Script /SourceFile:bin/Debug/MyDatabaseProject.dacpac /TargetConnectionString:"..." /OutputPath:deploy-script.sql
sqlpackage /Action:DeployReport /SourceFile:bin/Debug/MyDatabaseProject.dacpac /TargetConnectionString:"..." /OutputPath:report.xml
การดําเนินการจะ Script สร้าง T-SQL ที่แน่นอนที่จะเรียกใช้ การดําเนินการจะ DeployReport สร้างข้อมูลสรุป XML ของทุก CREATE, ALTERและ DROP. ตรวจสอบอย่างใดอย่างหนึ่งก่อนที่จะส่งการเปลี่ยนแปลงไปยังการผลิต
ประเด็นสําคัญ
โปรเจ็กต์ฐานข้อมูล SQL จัดเก็บออบเจ็กต์ฐานข้อมูลทุกรายการเป็นไฟล์ประกาศ .sql และบิลด์จะคอมไพล์เป็นสิ่งประดิษฐ์เดียว.dacpac โปรเจ็กต์สไตล์ SDK (Microsoft.Build.Sql) รองรับ .NET 8+, บิลด์ข้ามแพลตฟอร์ม, การอ้างอิงแพ็คเกจ NuGet และการ globbing เริ่มต้นสําหรับ .sql ไฟล์ กระบวนการสร้างจะตรวจสอบการอ้างอิงอ็อบเจ็กต์และไวยากรณ์ T-SQL กับแพลตฟอร์มเป้าหมายก่อนที่สิ่งใดจะไปถึงฐานข้อมูล SqlPackage คํานวณความแตกต่างระหว่างฐานข้อมูลและ .dacpac ฐานข้อมูลเป้าหมาย โดยสร้างเฉพาะคําสั่งที่จําเป็นในการปิดช่องว่าง ใช้การดําเนินการ Script และ DeployReport เพื่อแสดงตัวอย่างการเปลี่ยนแปลงที่วางแผนไว้ก่อนที่จะปรับใช้กับการผลิต โครงการ .dacpac ฐานข้อมูล SQL สิ่งประดิษฐ์ และ SqlPackage เป็นรากฐานสําหรับทุกสิ่งข้างหน้า รวมถึงการควบคุมแหล่งที่มา ไปป์ไลน์ CI/CD การตรวจจับการดริฟท์สคีมา และการทดสอบ