متغيرات SQL: تعريف المتغيرات وتعيينها واختيارها في SQL Server
⚡ ملخص ذكي
متغيرات SQL Server هي كائنات مُسماة تعمل كعناصر نائبة لقيمة بيانات واحدة في الذاكرة. يجب تعريف المتغير باستخدام عبارة DECLARE قبل إسناد قيمة إليه وإعادة استخدامه.

ما هو المتغير في SQL Server؟
In مرض التصلب العصبي المتعدد مزود خدمةالمتغيرات هي كائنات تعمل كعناصر نائبة لموقع في الذاكرة. يحتوي المتغير على قيمة بيانات واحدة يمكنك قراءتها وإعادة استخدامها عبر دفعة أو إجراء.
أنواع المتغيرات في SQL: المحلية والعالمية
يحتوي خادم MS SQL على نوعين من المتغيرات:
- متغير محلي
- المتغير العام
مع ذلك، لا يمكن للمستخدم إنشاء سوى متغير محلي. يوضح الشكل أدناه نوعي المتغيرات المتاحة في خادم MS SQL.
متغير محلي
- يعلن المستخدم عن المتغير المحلي.
- بشكل افتراضي، يبدأ اسم المتغير المحلي بـ @.
- يتم تحديد نطاق كل متغير محلي للدفعة أو الإجراء الحالي ضمن جلسة معينة.
المتغير العام
- يحتفظ النظام بالمتغير العام؛ ولا يمكن للمستخدم تعريف متغير عام.
- يبدأ اسم المتغير العام بـ @@.
- يخزن معلومات متعلقة بالجلسة.
كيفية الإعلان عن متغير في SQL
قبل استخدام أي متغير في دفعة أو إجراء في SQLيجب عليك تعريف المتغير. يُنشئ الأمر DECLARE متغيرًا يعمل كعنصر نائب لموقع في الذاكرة. ولا يُمكن استخدام المتغير في الجزء اللاحق من العملية أو الإجراء إلا بعد تعريفه.
بناء جملة TSQL:
DECLARE { @LOCAL_VARIABLE[AS] data_type [ = value ] }
قواعد:
- التهيئة اختيارية أثناء التصريح.
- بشكل افتراضي، يقوم الأمر DECLARE بتهيئة المتغير إلى NULL.
- يعد استخدام الكلمة الأساسية "AS" أمرًا اختياريًا.
- لتعريف أكثر من متغير محلي، أضف فاصلة بعد التعريف الأول، ثم أعط اسم المتغير التالي و نوع البيانات.
أمثلة على الإعلان عن المتغير
الاستعلام: مع "AS"
DECLARE @COURSE_ID AS INT;
الاستعلام: بدون "AS"
DECLARE @COURSE_NAME VARCHAR (10);
الاستعلام: قم بتعريف متغيرين
DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);
تعيين قيمة لمتغير SQL
يمكنك تعيين قيمة لمتغير بثلاث طرق:
- أثناء تعريف المتغيرات باستخدام الكلمة المفتاحية DECLARE.
- باستخدام مجموعة.
- باستخدام SELECT.
دعونا نلقي نظرة على الطرق الثلاث بالتفصيل.
أثناء إعلان المتغير باستخدام الكلمة الأساسية DECLARE
بناء جملة T-SQL:
DECLARE { @Local_Variable [AS] Datatype [ = value ] }
هنا، بعد نوع البيانات يمكنك استخدام '=' متبوعًا بالقيمة المراد تعيينها.
الاستعلام:
DECLARE @COURSE_ID AS INT = 5 PRINT @COURSE_ID
يؤدي تشغيل الاستعلام إلى طباعة القيمة التي تم تعيينها أثناء الإعلان، كما هو موضح أدناه.
استخدام متغير SQL SET
أحيانًا نرغب في فصل عملية تعريف المتغير عن عملية تهيئته. تقوم الدالة SET بتعيين قيمة للمتغير بعد تعريفه. فيما يلي الطرق المختلفة لتعيين القيم باستخدام SET.
مثال: إسناد قيمة لمتغير باستخدام الأمر SET
بناء الجملة:
DECLARE @Local_Variable <Data_Type> SET @Local_Variable = <Value>
الاستعلام:
DECLARE @COURSE_ID AS INT SET @COURSE_ID = 5 PRINT @COURSE_ID
يؤدي تنفيذ البرنامج النصي إلى إرجاع القيمة المعينة باستخدام الأمر SET، كما هو موضح أدناه.
مثال: تعيين قيمة لمتغيرات متعددة باستخدام الأمر SET
بناء الجملة:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>, SET @Local_Variable_1 = <Value_1> SET @Local_Variable_2 = <Value_2>
القاعدة: يمكن لكلمة SET واحدة أن تُسند قيمة لمتغير واحد فقط.
الاستعلام:
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SET @COURSE_ID = 5 SET @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
تقوم عبارتا الطباعة (PRINT) بإرجاع القيمتين المعينتين، كما هو موضح أدناه.
مثال: إسناد قيمة لمتغير باستخدام استعلام فرعي عددي باستخدام SET
بناء الجملة:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)
قواعد:
- ضع الاستعلام بين قوسين.
- يجب أن يكون الاستعلام استعلامًا عدديًا، أي أنه يُرجع صفًا واحدًا وعمودًا واحدًا فقط. وإلا، فسيُظهر الاستعلام خطأً.
- إذا أعاد الاستعلام صفر صفوف، فسيتم تعيين المتغير إلى EMPTY، أي NULL.
لنفترض أن لدينا جدول اسم الشيئ 'Guruجدول مكون من عمودين، كما هو موضح أدناه. يُستخدم هذا الجدول في الأمثلة التالية.
مثال 1: عندما تُرجع الاستعلامات الفرعية صفًا واحدًا كنتيجة
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3) PRINT @COURSE_NAME
لأن الاستعلام الفرعي يُرجع صفًا واحدًا مطابقًا، فإن المتغير يتلقى تلك القيمة، كما هو موضح أدناه.
مثال 2: عندما تُرجع الاستعلامات الفرعية صفر صفوف كنتيجة
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
لأن الاستعلام الفرعي لا يُرجع أي صفوف، فإن قيمة المتغير فارغة، أي NULL، لذلك لا يتم طباعة أي شيء، كما هو موضح أدناه.
استخدام متغير SELECT في SQL
تمامًا كما هو الحال مع الأمر SET، يمكنك أيضًا استخدام الأمر SELECT لتعيين قيم للمتغيرات بعد تعريفها باستخدام الأمر DECLARE. فيما يلي طرق مختلفة لتعيين قيمة باستخدام الأمر SELECT.
مثال: إسناد قيمة إلى متغير باستخدام SELECT
بناء الجملة:
DECLARE @LOCAL_VARIABLE <Data_Type> SELECT @LOCAL_VARIABLE = <Value>
الاستعلام:
DECLARE @COURSE_ID INT SELECT @COURSE_ID = 5 PRINT @COURSE_ID
تقوم عملية تحديد القيمة بطباعة القيمة، كما هو موضح أدناه.
مثال: إسناد قيمة إلى متغيرات متعددة باستخدام SELECT
بناء الجملة:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>, @Local_Variable _2 = <Value_2>
القاعدة: على عكس الأمر SET، يمكن للأمر SELECT تعيين قيمة لمتغيرات متعددة مفصولة بفواصل.
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
يتم تعيين كلا المتغيرين في استعلام SELECT واحد، كما هو موضح أدناه.
مثال: إسناد قيمة إلى متغير باستخدام استعلام فرعي باستخدام SELECT
بناء الجملة:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)
قواعد:
- ضع الاستعلام بين قوسين.
- يجب أن يكون الاستعلام استعلامًا عدديًا يُرجع صفًا واحدًا وعمودًا واحدًا. وإلا، فسيُظهر الاستعلام خطأً.
- إذا أعاد الاستعلام صفر صفوف، فإن المتغير يكون فارغًا، أي NULL.
أعد النظر في "Guruطاولة 99'.
مثال 1: عندما تُرجع الاستعلامات الفرعية صفًا واحدًا كنتيجة
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1) PRINT @COURSE_NAME
تُرجع الاستعلامة الفرعية صفًا واحدًا، لذا فإن المتغير يحمل تلك القيمة، كما هو موضح أدناه.
مثال 2: عندما تُرجع الاستعلامات الفرعية صفر صفوف كنتيجة
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
في حالة عدم وجود صف مطابق، يظل المتغير فارغًا، أي NULL، كما هو موضح أدناه.
مثال 3: إسناد قيمة إلى متغير باستخدام عبارة SELECT عادية
بناء الجملة:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>
قواعد:
- بخلاف الأمر SET، إذا أعاد الاستعلام عدة صفوف، فسيتم تعيين قيمة المتغير إلى قيمة الصف الأخير.
- إذا أعاد الاستعلام صفر صفوف، فسيتم تعيين المتغير إلى EMPTY، أي NULL.
الاستعلام 1: يُرجع الاستعلام صفًا واحدًا
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3 PRINT @COURSE_NAME
يقوم الصف المطابق الوحيد بتعيين قيمة المتغير، كما هو موضح أدناه.
الاستعلام الثاني: يُرجع الاستعلام عدة صفوف
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 PRINT @COURSE_NAME
عندما تتطابق عدة صفوف، يحتفظ المتغير بالقيمة من الصف الأخير، كما هو موضح أدناه.
الاستعلام 3: يُرجع الاستعلام صفر صفوف
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5 PRINT @COURSE_NAME
عندما لا تتطابق أي صفوف، يكون المتغير فارغًا، أي NULL، كما هو موضح أدناه.
أمثلة أخرى لمتغيرات SQL
يمكن أيضًا استخدام متغير مُعلن داخل استعلام، على سبيل المثال في عبارة WHERE لتصفية الصفوف.
الاستعلام:
DECLARE @COURSE_ID Int = 1 SELECT * from Guru99 where Tutorial_id = @COURSE_ID
يقوم المتغير بتصفية الاستعلام وإرجاع الصف المطابق، كما هو موضح أدناه.
حقائق مثيرة للاهتمام حول متغيرات SQL Server!
- يمكن عرض متغير محلي باستخدام الأمر PRINT وكذلك الأمر SELECT.
- لا يسمح نوع بيانات الجدول باستخدام 'AS' أثناء الإعلان.
- يتوافق الأمر SET مع معايير ANSI، بينما لا يتوافق الأمر SELECT معها.
- يُسمح أيضاً بإنشاء متغير محلي باسم @. على سبيل المثال، يمكن تعريفه على النحو التالي:
'DECLARE @@ as VARCHAR (10)'















