وصف الدفعات
دفعات T-SQL هي مجموعات من واحدة أو أكثر من عبارات T-SQL التي يتم إرسالها إلى SQL Server بواسطة عميل كوحدة واحدة. يعمل SQL Server على جميع العبارات في دفعة في نفس الوقت عند تحليل التعليمات البرمجية وتحسينها وتنفيذها.
إذا كنت كاتب تقارير تكتب عادة الاستعلامات باستخدام SELECT العبارات وليس الإجراءات، فلا يزال من المهم فهم حدود الدفعات. تؤثر هذه الحدود على عملك من خلال المتغيرات والمعاملات في الإجراءات المخزنة والروتينات الأخرى. على سبيل المثال، يجب الإعلان عن متغير في نفس الدفعة التي يتم الرجوع إليها. لذلك، من المهم التعرف على ما هو موجود في دفعة واحدة.
يتم تحديد الدفعات بواسطة تطبيق العميل. تعتمد كيفية وضع علامة على نهاية الدفعة على إعدادات العميل الخاص بك. بالنسبة لعملاء مايكروسوفت بما في ذلك SQL Server Management Studio (SSMS) وSQLCMD، الكلمة المفتاحية هي GO.
في هذا المثال، هناك دفعتان مميزتان تنتهي كل منهما ببيان GO :
CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO
إن أداة إنهاء الدفعة GO ليست كلمة أساسية T-SQL، ولكنها كلمة تعرف عليها SSMS للإشارة إلى نهاية الدفعة.
ضع في اعتبارك نقطتين مهمتين عند العمل مع دفعات T-SQL:
- الدفعات هي حدود لنطاق المتغير، مما يعني أن المتغير المعرف في دفعة واحدة لا يمكن الرجوع إليه إلا بواسطة كود آخر في نفس الدفعة
- بعض العبارات، عادة عبارات تعريف البيانات مثل
CREATE VIEW،CREATE FUNCTION،CREATE PROCEDUREولا يمكن دمجها مع عبارات أخرى في نفس الدفعة.
العمل مع الدفعات
الدفعة هي مجموعة من عبارات T-SQL المرسلة إلى SQL Server لتحليلها وتنفيذها. فهم كيفية تحليل الدفعات مفيد في تحديد رسائل الأخطاء والسلوك. عند إرسال دفعة من قبل عميل، مثل عند الضغط على الزر Execute في SSMS، يتم تحليل الدفعة لأخطاء بناء الجملة بواسطة محرك SQL Server. أي أخطاء يتم العثور عليها تؤدي إلى رفض الدفعة بأكملها؛ لا يوجد تنفيذ جزئي للبيانات داخل الدفعة.
إذا مرت الدفعة بالتحقق من بناء الجملة، يقوم SQL Server بتشغيل خطوات أخرى، وحل أسماء الكائنات، والتحقق من الأذونات، وتحسين التعليمات البرمجية للتنفيذ. بمجرد اكتمال هذه العملية وبدء التنفيذ، تنجح العبارات أو تفشل بشكل فردي. هذا تباين مهم للتحقق من بناء الجملة. عندما يحدث خطأ في وقت التشغيل على سطر واحد، يمكن للسطر التالي أن ينفذ، ما لم تضف معالجة الأخطاء إلى الكود.
على سبيل المثال، تحتوي الدفعة التالية على خطأ في بناء الجملة:
INSERT INTO dbo.t1 VALUE(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
يعطي رسالة الخطأ هذه:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'VALUE'.
حدث الخطأ في السطر 1، ولكن تم رفض الدفعة بأكملها، ولا يستمر التنفيذ مع السطر 2. حتى لو تم عكس كل INSERT عبارة وحدث خطأ في النحوية في السطر الثاني، فلن يتم تنفيذ الخط الأمامي لأن الدفعة بأكملها سترفض أيضا.
على النقيض من ذلك، هذه الدفعة المصححة لا تحتوي على خطأ:
INSERT INTO dbo.t1 VALUES(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
العينات السابقة تستخدم INSERT عبارات بدلا من SELECT أن تجمع عبارات التعديل عادة في دفعات.