Tạo, xây dựng và xác thực các dự án cơ sở dữ liệu SQL
Trước khi có thể tự động hóa việc triển khai, chạy thử nghiệm hoặc phát hiện sự trôi dạt của lược đồ, bạn cần một cái gì đó mà quy trình thực sự có thể xây dựng. Đó là một dự án cơ sở dữ liệu SQL.
Hiểu các dự án cơ sở dữ liệu SQL
Hãy nghĩ về một dự án cơ sở dữ liệu SQL như cơ sở dữ liệu của bạn ở dạng tệp. Mỗi bảng, thủ tục lưu trữ, chế độ xem và hàm đều nằm trong tệp riêng .sql của nó. Bạn khai báo mỗi đối tượng một lần và khi bạn cần thêm một cột hoặc thay đổi kiểu dữ liệu, bạn chỉnh sửa tệp duy nhất đó.
Nếu bạn đã làm việc với các tập lệnh di chuyển trước đây, sự khác biệt là đáng kể. Các tập lệnh di chuyển là tuần tự. Bạn viết một ALTER tuyên bố, hy vọng nó chạy theo đúng thứ tự và tích lũy một chuỗi thay đổi ngày càng tăng theo thời gian. Một dự án cơ sở dữ liệu SQL có cách tiếp cận ngược lại: bạn duy trì trạng thái kết thúc mong muốn của mỗi đối tượng và công cụ tính toán sự khác biệt giữa dự án và cơ sở dữ liệu đích tại thời điểm triển khai.
Khi bạn xây dựng dự án, đầu ra là một .dacpac tệp, một mô hình được biên dịch của toàn bộ lược đồ cơ sở dữ liệu của bạn. Bạn xuất bản nó .dacpac để tạo cơ sở dữ liệu mới hoặc cập nhật cơ sở dữ liệu hiện có. Quá trình xây dựng cung cấp cho bạn hai điều quan trọng đối với CI/CD:
- Xác thực: tham chiếu đối tượng và cú pháp T-SQL được kiểm tra dựa trên một phiên bản SQL cụ thể trước khi mọi thứ được triển khai.
-
Một cấu phần phần mềm có thể triển khai: trở
.dacpacthành gói duy nhất đi qua quy trình của bạn đến mọi môi trường.
Chọn giữa các dự án gốc và kiểu SDK
Các dự án cơ sở dữ liệu SQL có hai định dạng. Định dạng gốc được xây dựng trên MSBuild (.NET Framework) và đi kèm với SQL Server Data Tools (SSDT) trong Visual Studio. Định dạng kiểu SDK được xây dựng trên Microsoft.Build.Sql SDK dự án và là định dạng được sử dụng bởi phần mở rộng Dự án cơ sở dữ liệu SQL cho Visual Studio Code.
Đối với các dự án mới, hãy sử dụng kiểu SDK. Nó mang lại các khả năng mà định dạng gốc không có:
- Hỗ trợ .NET 8+, vì vậy bạn có thể xây dựng đa nền tảng trên Windows, Linux và macOS. Hỗ trợ này quan trọng khi trình chạy CI của bạn không phải là máy Windows.
- Các tham chiếu gói NuGet cho các tham chiếu cơ sở dữ liệu, vì vậy quản lý phụ thuộc tuân theo các mẫu tương tự như phần còn lại của hệ sinh thái .NET.
-
Globbing mặc định cho
.sqlcác tệp. Thả tệp vào thư mục dự án và tệp đó sẽ tự động được đưa vào bản dựng. Không cần nhập tệp thủ công.
Nếu bạn có một dự án gốc hiện có, bạn có thể chuyển đổi nó sang kiểu SDK bằng cách sửa đổi .sqlproj tệp. Trước khi bạn chuyển đổi dự án, hãy sao lưu tệp dự án và lưu trữ một .dacpac từ dự án hiện tại. So sánh "trước" và "sau" .dacpac để xác nhận việc chuyển đổi đã giữ nguyên mọi thứ.
Lưu ý
Các dự án SQL kiểu SDK thường có sẵn trong Visual Studio Code và trong bản xem trước trong Visual Studio 2022. Visual Studio 2026 chỉ hỗ trợ định dạng dự án SQL gốc.
Tạo và điền vào dự án
Bạn có thể tạo dự án cơ sở dữ liệu SQL từ Visual Studio Code, Visual Studio hoặc dòng lệnh. Dòng lệnh đặc biệt tiện dụng cho các tình huống CI/CD không có môi trường đồ họa.
Cách tạo dự án kiểu SDK mới:
dotnet new sqlproj -n MyDatabaseProject
📝 Thao tác này sẽ tạo một .sqlproj tệp có định dạng kiểu SDK. Từ đây, bạn thêm các đối tượng cơ sở dữ liệu bằng cách thả .sql các tệp vào thư mục dự án. Mô hình globbing mặc định sẽ tự động chọn chúng.
Ví dụ: để xác định bảng, hãy tạo 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
);
Bắt đầu với cơ sở dữ liệu hiện có? Các công cụ so sánh lược đồ cho phép bạn so sánh cơ sở dữ liệu trực tiếp với một dự án trống và nhập sự khác biệt, vì vậy bạn không phải tạo lại mọi đối tượng bằng tay.
Xây dựng và xác thực dự án
Xây dựng là nơi mạng lưới an toàn bắt đầu. Quá trình xây dựng xác thực mọi tham chiếu đối tượng và kiểm tra cú pháp T-SQL so với nền tảng đích. Nếu chế độ xem tham chiếu đến một cột không tồn tại, thì bản dựng sẽ không thành công. Nếu bạn sử dụng hàm vectơ được thêm vào SQL Server 2025 nhưng dự án của bạn nhắm mục tiêu SQL Server 2017 (Sql140), bản dựng sẽ bắt được hàm đó.
Cách xây dựng từ dòng lệnh:
dotnet build MyDatabaseProject.sqlproj
📝 Bản dựng tạo một .dacpac tệp trong bin/Debug thư mục theo mặc định.
Kết quả của bản dựng bao gồm các lỗi (chặn bản dựng) và cảnh báo (chẳng hạn như cách viết hoa không nhất quán trong tên đối tượng). Cảnh báo không ngăn chặn quá trình xây dựng, nhưng chúng đáng để chú ý. Bạn cũng có thể bật các quy tắc phân tích mã SQL để gắn cờ các vi phạm phương pháp hay nhất trong quá trình xây dựng, phát hiện các vấn đề như cú pháp tham gia không dùng nữa, SELECT * trong chế độ xem hoặc cột chưa được lập chỉ mục trong IN vị ngữ.
Nền tảng đích được đặt trong .sqlproj tệp và kiểm soát tính năng T-SQL nào vượt qua xác thực. Đặt nó để phù hợp với mục tiêu triển khai của bạn, cho dù đó là SQL Server 2025 hay Cơ sở dữ liệu Azure SQL.
Triển khai dự án
Khi bạn có , .dacpacSqlPackage xử lý việc triển khai. Cài đặt nó như một công cụ toàn cầu .NET:
dotnet tool install --global microsoft.sqlpackage
Sau đó xuất bản lên cơ sở dữ liệu đích:
sqlpackage /Action:Publish /SourceFile:bin/Debug/MyDatabaseProject.dacpac /TargetConnectionString:"Server=myserver.database.windows.net;Database=mydb;Authentication=Active Directory Default"
📝 SqlPackage đa nền tảng và chạy trên Windows, Linux và macOS.
Điều gì xảy ra trong quá trình triển khai phụ thuộc vào mục tiêu. Đối với cơ sở dữ liệu mới, SqlPackage điều hướng biểu đồ phụ thuộc đối tượng và tạo từng đối tượng theo đúng thứ tự, chẳng hạn như các bảng được tham chiếu trước khóa ngoại. Đối với cơ sở dữ liệu hiện có, nó tính toán sự khác biệt giữa .dacpac lược đồ và lược đồ trực tiếp, sau đó chỉ tạo ra các ALTER câu lệnh cần thiết để thu hẹp khoảng cách. Thiếu hai cột? Bạn nhận được một với ALTER TABLE cả hai bổ sung. Quá trình này là idempotent. Triển khai cùng năm .dacpac lần và lần chạy thứ năm không thay đổi gì. Bạn cũng có thể phân bổ một cơ .dacpac sở dữ liệu trên một nhóm cơ sở dữ liệu khi nâng cấp nhiều đối tượng thuê.
Trước khi triển khai trực tiếp, bạn có thể xem trước các thay đổi đã lên kế hoạch:
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
Hành động này Script tạo ra T-SQL chính xác sẽ chạy. Hành động này DeployReport tạo ra một bản tóm tắt XML của mọi CREATE, ALTERvà DROP. Xem lại một trong hai thay đổi trước khi đẩy các thay đổi vào sản xuất.
Khóa takeaways
Dự án cơ sở dữ liệu SQL lưu trữ mọi đối tượng cơ sở dữ liệu dưới dạng tệp khai .sql báo và bản dựng biên dịch chúng thành một cấu phần phần mềm duy nhất .dacpac . Các dự án kiểu SDK (Microsoft.Build.Sql) hỗ trợ .NET 8+, các bản dựng đa nền tảng, tham chiếu gói NuGet và globbing mặc định cho .sql các tệp. Quá trình xây dựng xác thực các tham chiếu đối tượng và cú pháp T-SQL dựa trên nền tảng đích trước khi mọi thứ đến cơ sở dữ liệu. SqlPackage tính toán sự khác biệt giữa cơ sở dữ liệu và .dacpac cơ sở dữ liệu đích, chỉ tạo ra các câu lệnh cần thiết để thu hẹp khoảng cách. Sử dụng các Script hành động và DeployReport để xem trước các thay đổi đã lên kế hoạch trước khi triển khai vào sản xuất. Dự án cơ sở dữ liệu SQL, cấu phần phần mềm của nó .dacpac và SqlPackage tạo thành nền tảng cho mọi thứ phía trước, bao gồm kiểm soát nguồn, quy trình CI/CD, phát hiện trôi lược đồ và kiểm tra.