إذا قمت بترحيل بيانات Access إلى SQL Server أو قمت بإنشاء حل Access مع SQL Server كقاعدة بيانات موجودة على الخادم، فمن المهم أن تعرف الاختلافات بين Access SQL وSQL Server Transact SQL (TSQL). فيما يلي الاختلافات المهمة التي تحتاج إلى معرفتها حتى يعمل الحل على النحو المنشود.
للحصول على مزيد من المعلومات، اطلع على Access SQL: المفاهيم الأساسية والكلمات وبناء الجملة ومرجع Transact-SQL.
اختلافات التعبير وبناء الجملة
هناك بعض الاختلافات في بناء الجملة والتعبير التي تتطلب التحويل. يلخص الجدول التالي العناصر الأكثر شيوعاً.
الفرق |
Access SQL |
SQL Server TSQL |
سمة قاعدة البيانات العلائقية |
عادةً ما يسمى الحقل |
عادةً ما يسمى العمود |
القيم الحرفية للسلاسل |
علامة الاقتباس (")، على سبيل المثال "سهام عزة" |
الفاصلة العليا (')، على سبيل المثال 'سهام عزة' |
القيم الحرفية للتاريخ |
علامة الشباك (#)، على سبيل المثال #1/1/2019# |
علامة الاقتباس الأحادية (')، على سبيل المثال '1/1/2019' |
مجموعة أحرف البدل المتعددة |
علامة النجمة (*)، مثل "علياء*" |
النسبة المئوية (%)، على سبيل المثال، 'علياء%' |
مجموعة أحرف البدل الفردية |
علامة الاستفهام (؟)، مثل "علياء؟" |
التسطير السفلي (_)، مثل "علياء_" |
عامل باقي القسمة |
عامل الدالة MOD، على سبيل المثال القيمة1 MOD القيمة2 |
النسبة المئوية (%)، مثل القيمة1 % القيمة2 |
القيم المنطقية |
WHERE Bitvalue = [True | False] أو WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
المعلمات |
[<اسم غير العمود المعرّف>] أو في طريقه عرض SQL، استخدم تعريف معلمات SQL |
@ParamName |
الملاحظات
-
يستخدم Access أحرف الاقتباس (") حول أسماء الجداول والعناصر. يمكن لـ T-SQL استخدامها لأسماء الجداول ذات المسافات، ولكن هذه ليست ممارسة تسمية قياسية. في معظم الحالات، يجب إعادة تسمية أسماء العناصر دون مسافات، ولكن يجب أيضاً إعادة كتابة الاستعلامات لعكس أسماء الجداول الجديدة. استخدم الأقواس [ ] للجداول التي لا يمكن إعادة تسميتها ولكنها لا تتوافق مع معايير التسمية. ويضيف Access أيضاً أقواساً إضافية حول المعلمات في الاستعلامات، ولكن يمكن إزالتها في T-SQL.
-
ضع في اعتبارك استخدام تنسيق التاريخ المتعارف عليه، yyyy-mm-dd hh:nn:ss، وهو معيار ODBC للتواريخ المخزنة كأحرف توفر طريقة متسقة لتمثيلها عبر قواعد البيانات والحفاظ على ترتيب فرز التاريخ.
-
لتجنب حدوث تشويش عند مقارنة القيم المنطقية، يمكنك استخدام المقارنة التالية لـ Access وSQL Server:
-
اختبار القيمة false WHERE Bitvalue = 0
-
اختبار القيمة true WHERE Bitvalue <> 0
-
القيم الخالية
ليست القيمة الخالية حقلاً فارغاً يعني "لا قيمة على الإطلاق". بل تُعد القيمة الخالية عنصراً نائباً يعني أن البيانات مفقودة أو غير معروفة. تطبق أنظمة قواعد البيانات التي تتعرف على القيم الخالية "منطقاً بثلاثة قيم"، مما يعني أن شيئاً ما قد يكون صواباً أو خاطئاً أو غير معروف. إذا لم تتعامل بشكل صحيح مع القيم الخالية، يمكنك الحصول على نتائج غير صحيحة عند إجراء مقارنات المساواة أو تقييم العبارات WHERE. فيما يلي مقارنة حول كيفية تعامل Access وSQL Server مع القيم الخالية.
تعطيل القيم الخالية في جدول
في Access وSQL Server، تتمثل التجربة الافتراضية في تمكين القيم الخالية. لتعطيل القيم الخالية في عمود جدول، قم بما يلي:
-
في Access، قم بتعيين الخاصية مطلوبة في الحقل إلى "نعم".
-
في SQL Server، أضف السمة NOT NULL إلى عمود في العبارة CREATE TABLE.
اختبار القيم الخالية في العبارة WHERE
استخدم دالات المقارنة IS NULL وIS NOT NULL:
-
في Access، استخدم القيم IS NULL أو IS NOT NULL. على سبيل المثال:
SELECT … WHERE column IS NULL.
-
في SQL Server، استخدم القيم IS NULL أو IS NOT NULL. على سبيل المثال:
SELECT … WHERE field IS NULL
تحويل القيم الخالية باستخدام الدالات
استخدم الدالات الخالية لحماية التعابير وإرجاع القيم البديلة:
-
في Access، استخدم الدالة NZ (القيمة، [valueifnull]) التي تقوم بإرجاع 0 أو قيمة أخرى. على سبيل المثال:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
في SQL Server، استخدم الدالة ISNULL(Value, replacement_value) التي تقوم بإرجاع 0 أو قيمة أخرى. على سبيل المثال:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
استيعاب خيارات قاعدة البيانات
تتضمن بعض أنظمة قواعد البيانات آليات خاصة:
-
في Access، لا تتوفر خيارات قاعدة البيانات التي تتعلق بالقيمة Null.
-
في SQL Server، يمكنك استخدام الخيار SET ANSI_NULLS OFF لمقارنات المساواة المباشرة مع القيمة NULL باستخدام عوامل التشغيل = و <>. نوصيك بتجنب استخدام هذا الخيار لأنه تم إهماله، ويمكن أن يخلط بين الآخرين الذين يعتمدون على معالجة خالية متوافقة مع ISO.
التحويل والإرسال
كلما كنت تستخدم البيانات أو البرمجة، فهناك حاجة مستمرة للتحويل من نوع بيانات إلى آخر. يمكن أن تكون عملية التحويل بسيطة أو معقدة. إن المشاكل الشائعة التي تحتاج إلى التفكير فيها هي: التحويل الضمني أو الصريح، والإعدادات الإقليمية للتاريخ والوقت الحالي، وتقريب الأرقام أو اقتطاعها، وأحجام أنواع البيانات. لا يوجد بديل للاختبار الشامل وتأكيد النتائج.
في Access، يمكنك استخدام وظائف تحويل الأنواع، التي توجد منها إحدى عشرة وظيفة، تبدأ كل منها بالحرف C، واحدة لكل نوع بيانات. على سبيل المثال، لتحويل رقم ذات فاصلة عائمة إلى سلسلة:
CStr(437.324) returns the string "437.324".
في SQL Server، يمكنك استخدام الدالتين TSQL وهما CAST وCONVERT SQL، على الرغم من وجود وظائف تحويل أخرى لتلبيه الاحتياجات الخاصة. على سبيل المثال، لتحويل رقم ذات فاصلة عائمة إلى سلسلة:
CONVERT(TEXT, 437.324) returns the string "437.324"
الدالات DateAdd وDateDiff وDatePart
إن دالات التاريخ شائعة الاستخدام (DateAdd وDateDiff وDatePart) متشابهة في Access وTSQL، ولكن يختلف استخدام الوسيطة الأولى.
-
في Access، تسمى الوسيطة الأولى الفاصل الزمني، وهي عبارة عن تعبير سلسلة يتطلب علامات اقتباس.
-
في SQL Server، تسمى الوسيطة الأولى datepart، وتستخدم قيم الكلمات الأساسية التي لا تتطلب علامات اقتباس.
المكون
Access
SQL Server
السنة
"yyyy"
السنة، yy، yyyy
ربع السنة
"q"
ربع السنة، qq، q
الشهر
"m"
الشهر، mm، m
يوم من السنة
"y"
يوم_من_السنة، dy، y
يوم
"d"
اليوم، dd، d
الأسبوع
"ww"
wk، ww
يوم من أيام الأسبوع
"w"
يوم من أيام الأسبوع، dw
الساعة
"h"
الساعة، hh
الدقيقة
"n"
الدقيقة، mi، n
الثانية
"s"
الثانية، ss، s
ميلي ثانية
ميلي ثانية، ms
مقارنة الدالات
يمكن أن تحتوي استعلامات Access على أعمدة محسوبة تستخدم أحياناً وظائف Access للحصول على النتائج. عندما تقوم بترحيل الاستعلامات إلى SQL Server، فإنك تحتاج إلى استبدال وظيفة Access بوظيفة TSQL مكافئة في حالة توفرها. إذا لم تكن هناك وظيفة TSQL مقابلة، يمكنك عادةً إنشاء عمود محسوب (مصطلح TSQL يستخدم لعمود محسوب) للقيام بما تريد. يحتوي TSQL على مجموعة واسعة من الوظائف ومن المفيد معرفة الميزات المتوفرة. للحصول على مزيد المعلومات، اطلع على ما هي دالات قواعد بيانات SQL؟.
يعرض الجدول التالي وظيفة Access التي لها وظيفة TSQL مقابلة.
فئة Access |
الدالة Access |
الدالة TSQL |
إرسال |
||
إرسال |
||
إرسال |
||
إرسال |
||
إرسال |
||
إرسال |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
تاريخ/وقت |
||
دالات المجال التجميعية |
||
الرياضيات |
||
الرياضيات |
||
الرياضيات |
||
الرياضيات |
||
الرياضيات |
||
الرياضيات |
||
الرياضيات |
||
الرياضيات |
||
الرياضيات |
||
الرياضيات |
||
الرياضيات |
||
تدفق البرنامج |
||
تدفق البرنامج |
||
دالة إحصائية |
||
دالات SQL التجميعية |
||
دالات SQL التجميعية |
||
دالات SQL التجميعية |
||
دالات SQL التجميعية |
||
دالات SQL التجميعية |
||
نص |
||
نص |
||
نص |
||
نص |
||
نص |
||
نص |
||
نص |
||
نص |
||
نص |