إنشاء وبناء والتحقق من صحة مشاريع قواعد بيانات SQL
قبل أن تتمكن من أتمتة النشرات، أو إجراء الاختبارات، أو اكتشاف انحراف المخطط، تحتاج إلى شيء يمكن لخط الأنابيب بناؤه فعليا. ذلك الشيء هو مشروع قاعدة بيانات SQL.
فهم مشاريع قواعد بيانات SQL
فكر في مشروع قاعدة بيانات SQL كقاعدة بيانات في شكل ملف. كل جدول، وكل إجراء مخزن، وعرض، ودالة موجودة في ملفه الخاص .sql . تعلن عن كل كائن مرة واحدة، وعندما تحتاج لإضافة عمود أو تغيير نوع بيانات، تقوم بتحرير ذلك الملف الواحد.
إذا كنت قد عملت مع سكريبتات الترحيل من قبل، فالفرق كبير. سكريبتات الهجرة متتابعة. تكتب بيانا ALTER ، وتأمل أن يكون بالترتيب الصحيح، وتتراكم سلسلة متزايدة من التغييرات مع مرور الوقت. مشروع قاعدة بيانات SQL يتبع نهجا معاكسا: حيث تحافظ على الحالة النهائية المطلوبة لكل كائن، وتحسب الأدوات الفرق بين المشروع وقاعدة البيانات المستهدفة عند وقت النشر.
عندما تبني المشروع، يكون .dacpac الناتج ملفا، نموذج مترجم لمخطط قاعدة البيانات بأكمله. تنشر ذلك .dacpac لإنشاء قاعدة بيانات جديدة أو تحديث قاعدة بيانات موجودة. عملية البناء تعطيك أمرين مهمين ل CI/CD:
- التحقق من الصحة: يتم التحقق من مراجع الكائنات وبناء جملة T-SQL مقابل نسخة محددة من SQL قبل نشر أي شيء.
-
أداة قابلة للنشر:
.dacpacتصبح الحزمة الوحيدة التي تتدفق عبر خط الأنابيب إلى كل البيئة.
اختر بين المشاريع الأصلية ومشاريع بأسلوب SDK
مشاريع قاعدة بيانات SQL تأتي بتنسيقين. التنسيق الأصلي مبني على MSBuild (إطار عمل .NET) ويأتي مع أدوات بيانات SQL Server Data Tools (SSDT) في Visual Studio. تنسيق نمط SDK مبني على Microsoft.Build.Sql مجموعة تطوير المشاريع وهو التنسيق المستخدم في امتداد SQL Database Projects لكود Visual Studio.
للمشاريع الجديدة، اختر أسلوب SDK. يقدم قدرات لا تتوفر في التنسيق الأصلي:
- دعم .NET 8+، بحيث يمكنك بناء منصات متعددة على ويندوز ولينكس وmacOS. هذا الدعم مهم عندما لا تكون أجهزة CI Runner لديك من أجهزة ويندوز.
- مراجع حزم NuGet لمراجع قواعد البيانات، لذا تتبع إدارة التبعيات نفس الأنماط التي تتبع بقية نظام .NET البيئي.
-
الجلوب الافتراضي للملفات
.sql. أدخل ملفا في مجلد المشروع وسيتم تضمينه تلقائيا في البناء. لا حاجة لإدخالات ملفات يدوية.
إذا كان لديك مشروع أصلي موجود، يمكنك تحويله إلى نمط SDK عن طريق تعديل الملف .sqlproj . قبل تحويل المشروع، قم بعمل نسخة احتياطية من ملف المشروع وأرشف ملف A .dacpac من المشروع الحالي. قارن بين "قبل" و"بعد" .dacpac لتأكيد أن التحويل تم الحفاظ على كل شيء.
ملاحظة
مشاريع SQL بنمط SDK متوفرة عادة في كود Visual Studio وفي المعاينة في Visual Studio 2022. يدعم Visual Studio 2026 فقط تنسيق مشروع SQL الأصلي.
إنشاء وملء مشروع
يمكنك إنشاء مشروع قاعدة بيانات SQL من Visual Studio Code أو Visual Studio أو سطر الأوامر. سطر الأوامر مفيد بشكل خاص في سيناريوهات CI/CD التي لا تتوفر فيها بيئة رسومية.
لإنشاء مشروع جديد على نمط SDK:
dotnet new sqlproj -n MyDatabaseProject
📝 هذا ينتج ملفا .sqlproj بتنسيق SDK. من هنا، تضيف كائنات قاعدة البيانات عن طريق إسقاط .sql الملفات في مجلد المشروع. نمط الكتل الافتراضي يلتقطها تلقائيا.
على سبيل المثال، لتعريف جدول، قم بإنشاء 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
);
هل نبدأ بقاعدة بيانات موجودة؟ أدوات مقارنة المخطط تتيح لك مقارنة قاعدة بيانات حية مع مشروع فارغ واستيراد الفروقات، حتى لا تضطر لإعادة إنشاء كل كائن يدويا.
بناء المشروع والتحقق منه
البناء هو المكان الذي يبدأ فيه عمل شبكة الأمان. تقوم عملية البناء بالتحقق من صحة كل مرجع كائن وتتحقق من بناء جملة 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.
نشر المشروع
بمجرد أن يكون لديك ، .dacpacيتولى SqlPackage عملية النشر. قم بتثبيته كأداة .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 متعدد المنصات ويعمل على ويندوز ولينكس وmacOS.
ما يحدث أثناء النشر يعتمد على الهدف. بالنسبة لقاعدة بيانات جديدة، يتنقل SqlPackage في رسم الاعتماد على الكائنات وينشئ كل كائن بالترتيب الصحيح، مثل الجداول المشار إليها قبل المفاتيح الأجنبية. بالنسبة لقاعدة بيانات موجودة، يحسب الفرق بين المخطط .dacpac الحي، ثم يولد فقط العبارات ALTER اللازمة لسد الفجوة. هل ينقصك عمودان؟ تحصل على واحد ALTER TABLE مع الإضافتين. العملية غير موثوقة. إذا نشرت نفس .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، والجلوب الافتراضي للملفات .sql . تقوم عملية البناء بالتحقق من صحة مراجع الكائنات وبناء جملة T-SQL ضد المنصة المستهدفة قبل أن يصل أي شيء إلى قاعدة البيانات. يقوم SqlPackage بحساب الفرق بين قاعدة .dacpac البيانات وقاعدة البيانات المستهدفة، مولدا فقط العبارات اللازمة لسد الفجوة. استخدم الإجراءات Script ومعاينة DeployReport التغييرات المخططة قبل نشرها في الإنتاج. مشروع قاعدة بيانات SQL، وتشكيلة الصورة .dacpac ، وSqlPackage يشكلون الأساس لكل ما هو قادم، بما في ذلك التحكم في المصدر، وخطوط أنابيب CI/CD، وكشف انحراف المخطط، والاختبار.