Control of Flow Language Elements
مستوى الجمل Statement Level
تمكن عناصر
اللغة التالية من التحكم فى المنطق خلال النص البرمجى :
بلوكات BEGIN … END
تقوم هذه
الجملة باحتواء مجموعة من عبارات ترانزأكش سيكوال ولذلك تعتبر وحدات منفصلة .
بلوكات IF … ELSE
تحدد هذه
العناصر أن سيكوال سيرفر سيقوم بتنفيذ أول عبارة تطابق الشرط الموضوع ، وإلا سيقوم
سيكوال سيرفر بتنفيذ العبارة الثانية.
بناء حلقة التكرار WHILE
يقوم هذا
العنصر بتنفيذ العبارة بسرعة فى حالة إذا كان الشرط المحدد متحقق ، وتتحكم عبارات BREAK و CONTINUE فى العمليات الموجود داخل حلقة
تكرار WHILE .
مثال
يستخدم المثال
التالى جملة IF الشرطية لتحديد إذا كان يمكن
حذف العميل المحدد ، حيث يمكن الشرط بين حالتين ، فإذا كان للعميل طلبيات سابقة
فلن يتم حذفه ويتم إظهار رسالة تفيد ذلك ، وإذا لم يكن للعميل المحدد طلبيات سابقة
سيتم حذفه وستظهر رسالة تفيد الحذف .
USE northwind
IF EXISTS (SELECT * FROM orders
WHERE
customerid = 'frank')
PRINT '*** Customer cannot be deleted ***'
ELSE
BEGIN
DELETE
customers WHERE customerid = 'frank'
PRINT '***
Customer deleted ***'
END
GO
مستوى الصفوف Row Level
تستخدم دالة CASE قائمة من البدائل يتم توجيه قيمة لاختبارها بواسطة هذه البدائل ،
وإذا كان التعبير فى عبارة When يرجع قيمة صحيحة True تقوم دالة Case بإرجاع التعبير الموجود فى
عبارة Then ، وإذا كان التعبير خاطىء False يتم التفرع إلى عبارة Else إذا كانت
مستخدمة ، يمكن استخدام عبارة دالة Case فى أى مكان
فى التعبيرات .
الصيغة العامة
تتبع دالة Case الصيغة العامة التالية :
CASE expression
{WHEN expression THEN result} [,.n]
[ELSE result]
END
مثال
فى المثال
التالى يتم التصريح عن متغير داخلى ، ويتم فحص قيمة هذا المتغير فإذا كانت تساوى 4
أو 5 أو 6 فيتم الدخول داخل ترانزأكشن سيكوال
وحلقة تكرار While طالما كانت القيمة
بين 4 و 6 ، ثم يتم حساب العمليات الحسابية التالية وإرجاع ناتجها.
DECLARE @n tinyint
SET @n = 5
IF (@n BETWEEN 4 and 6)
BEGIN
WHILE (@n >
0)
BEGIN
SELECT @n AS 'Number'
,CASE
WHEN (@n
% 2) = 1
THEN
'ODD'
ELSE
'EVEN'
END AS
'Type'
SET @n = @n
- 1
END
END
ELSE
PRINT 'NO
ANALYSIS'
GO
وفى حالة عدم
تحقق الشرط يتم إنهاء الشرط ويتم إظهار رسالة NO ANALYSIS
الكلمات المحجوزة Reserved Keyword
يحتوى سيكوال
سيرفر على مجموعة من الكلمات المحجوزة ولا يمكن استخدامها إلا للأغراض المخصصة لها
، فمثلا لا يمكن استخدام الكلمات DUMP أو BACKUP إلا فى جلسات osql أو Query Analyzer .
لا يمكن
استخدام الكلمات المحجوزة فى ترانزأكشن سيكوال فى أى مكان إلا الأماكن المحددة
باستخدام سيكوال سيرفر ، وإذا كانت هناك ضرورة لاستخدام هذه الكلمات فى ترانزأكشن
سيكوال فيجب وضعها بين قوسين مربعين [
] .
استخدام
الترانزأكشن Using Transaction
الترانزأكشن
عبارة عن مجموعة من العبارات التى يتم قبولها دفعة واحدة ويقوم سيكوال سيرفر
بمعالجتها كوحدة واحدة من العمل ، وينجع الترانزأكشن أو يسقط كوحدة واحدة أيضا فلا
يمكن تنفيذ جزء بدون جزء آخر أو العكس ، وتدعم هذه العمليات دمج وتكامل البيانات .
يتم بدء عبارات
الترانزأكشن بجملة Begin
Transaction ويتم إنهائه
باستخدام عبارة Commit
Transaction فى حالة
إنهاء الترانزأكشن بنجاح وتنفيذ كافة عملياته ، وتستخدم عبارة Rollback Transaction أيضا لإنهاء الترانزأكشن لكن
بدون تنفيذ أى ممن العمليات المتضمنه به أى يكون ترانزأكشن فاشل .
الصيغة
BEGIN TRANSACTION
COMMIT / ROLLBACK TRANSACTION
مثال
BEGIN TRANSACTION
UPDATE savings
SET balance = (amount – 100)
WHERE custid = 78910
IF @@ERROR <> 0
BEGIN
RAISERROR ('Transaction not completed due to
savings account problem.', 16, -1)
ROLLBACK TRANSACTION
END
UPDATE checking
SET balance = (amount + 100)
WHERE custid = 78910
IF @@ERROR <> 0
BEGIN
RAISERROR ('Transaction not completed due to
checking account problem.', 16, -1)
ROLLBACK TRANSACTION
END
COMMIT TRANSACTION