אם אתה מעביר את נתוני Access ל- SQL Server, או אם אתה יוצר פתרון של Access עם SQL Server כמסד הנתונים העורפי, עליך להבין את ההבדל בין Access SQL ל-SQL Server Transact SQL (TSQL). להלן ההבדלים החשובים שעליך להבין כדי שהפתרון שלך יפעל כמתוכנן.
לקבלת מידע נוסף, ראה Access SQL: מושגים בסיסיים, אוצר מילים ותחביר וחומר עזר בנושא Transact-SQL.
הבדלים בתחביר ובביטוי
ישנם כמה הבדלים בתחביר ובביטוי שמחייבים המרה. הטבלה הבאה מסכמת את ההבדלים הנפוצים ביותר.
הבדל |
Access SQL |
SQL Server TSQL |
תכונת מסד נתונים יחסי |
נקראת בדרך כלל "שדה" |
נקראת בדרך כלל "עמודה" |
ליטרל מחרוזת |
מרכאות ("), כגון "הגר חזן" |
גרש ('), כגון 'הגר חזן' |
ליטרל תאריך |
סולמית (#), כגון #01/01/2019# |
גרש ('), כגון '01/01/2019' |
תו עבור תווים כלליים מרובים |
כוכבית (*), כגון "אבי*" |
אחוז (%), כגון 'אבי%' |
תו עבור תו כללי אחד |
סימן שאלה (?), כגון "אבי?" |
קו תחתון (_), כגון "אבי_" |
אופרטור מודולו |
אופרטור MOD, כגון Value1 MOD Value2 |
אחוז (%), כגון Value1 % Value2 |
ערכים בוליאניים |
WHERE Bitvalue = [True | False] או WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
פרמטרים |
[<שם שאינו עמודה מוגדרת>] או בתצוגת SQL, יש להשתמש בהצהרת PARAMETERS של SQL |
@שם_פרמטר |
הערות
-
Access משתמש בתווי מרכאות (") סביב שמות טבלאות ואובייקטים. T-SQL יכול להשתמש בהם עבור שמות טבלאות עם רווחים, אך זהו אינו נוהל סטנדרטי של מתן שמות. ברוב המקרים, יש לשנות את שם האובייקט כך שלא יכלול רווחים. בנוסף, יש לשכתב את השאילתות כדי לשקף את שמות הטבלאות החדשים. השתמש בסוגריים מרובעים [ ] עבור טבלאות שלא ניתן לשנות את שמן, אך שאינן תואמות לתקני מתן השמות. בנוסף, Access מוסיף סוגריים נוספים סביב פרמטרים בשאילתות, אך ניתן להסירם ב- T-SQL.
-
שקול להשתמש בתבנית התאריך הקנונית, yyyy-mm-dd hh:nn:ss, אשר מהווה תקן של ODBC עבור תאריכים שמאוחסנים כתווים. תבנית זו מספקת דרך עקבית לייצג את התאריכים בכל מסדי הנתונים ומשמרת את סדר המיון של התאריכים.
-
כדי למנוע בלבול בעת השוואה בין ערכים בוליאניים, ניתן להשתמש בהשוואה הבאה עבור Access ו- SQL Server:
-
בדיקה לאיתור ערך False WHERE Bitvalue = 0
-
בדיקה לאיתור ערך True WHERE Bitvalue <> 0
-
ערכי Null
ערך Null אינו שדה ריק שפירושו "אין כלל ערך". ערך Null הוא מציין מיקום שפירושו שחסרים נתונים או שהם אינם ידועים. מערכות מסדי נתונים שמזהות ערכי Null מיישמות "לוגיקה של שלושה ערכים"; כלומר, הערך יכול להיות True, False או לא ידוע. אם אינך מטפל כראוי בערכי Null, אתה עלול לקבל תוצאות שגויות בעת ביצוע השוואות שוויון או הערכת משפטי WHERE. להלן השוואה של האופן שבו Access ו- SQL Server מטפלים בערכי Null.
הפיכת ערכי Null ללא זמינים בטבלה
ב- Access וב- SQL Server, חוויית ברירת המחדל היא שערכי Null זמינים. כדי להפוך ערכי Null ללא זמינים בעמודת טבלה, בצע את הפעולות הבאות:
-
ב- Access, הגדר את המאפיין נדרש של השדה ל"כן".
-
ב- SQL Server, הוסף את התכונה NOT NULL לעמודה במשפט CREATE TABLE.
בדיקה לאיתור ערכי Null במשפט 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
המרת ערכי Null באמצעות פונקציות
השתמש בפונקציות של Null כדי להגן על הביטויים שלך ולהחזיר ערכים חלופיים:
-
ב- Access, השתמש בפונקציה NZ (value, [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 באמצעות האופרטורים = ו- <>. מומלץ להימנע משימוש באפשרות זו מכיוון שהיא יצאה משימוש ועלולה לבלבל משתמשים אחרים שמסתמכים על טיפול בערכי Null בהתאם ל- ISO.
המרה והמרת סוג משתנה
בכל פעם שאתה עובד עם נתונים או תיכנות, קיים צורך תמידי לבצע המרה בין סוגי נתונים שונים. תהליך ההמרה עשוי להיות פשוט או מורכב. בעיות נפוצות שעליך לחשוב עליהן הן: המרה משתמעת או מפורשת, ההגדרות האזוריות הקיימות של תאריך ושעה, עיגול או חיתוך של מספרים וגודל סוגי הנתונים. אין תחליף לבדיקה יסודית ולאישור של התוצאות.
ב-Access, יש להשתמש באחת מתוך 11 פונקציות המרת סוג, שכל אחת מהן מתחילה באות C (אחת עבור כל סוג נתונים). לדוגמה, כדי להמיר מספר נקודה צפה למחרוזת:
CStr(437.324) returns the string "437.324".
ב- SQL Server, יש להשתמש בעיקר בפונקציות CAST ו- CONVERT של TSQL, למרות שקיימות פונקציות המרה אחרות לצרכים מיוחדים. לדוגמה, כדי להמיר מספר נקודה צפה למחרוזת:
CONVERT(TEXT, 437.324) returns the string "437.324"
פונקציות DateAdd, DateDiff ו- DatePart
פונקציות תאריך נפוצות אלה (DateAdd, DateDiff ו- DatePart) זהות ב- Access וב- TSQL, אך השימוש בארגומנט הראשון שונה.
-
ב- Access, הארגומנט הראשון נקרא interval, והוא ביטוי מחרוזת שמחייב שימוש במרכאות.
-
ב- SQL Server, הארגומנט הראשון נקרא datepart, והוא משתמש בערכי מילות מפתח שאינם מחייבים שימוש במרכאות.
רכיב
Access
SQL Server
שנה
"yyyy"
year, yy, yyyy
רבעון
"q"
quarter, qq, q
חודש
"m"
month, mm, m
יום בשנה
"y"
dayofyear, dy, y
יום
"d"
day, dd, d
שבוע
"ww"
wk, ww
יום בשבוע
"w"
weekday, dw
שעה
"h"
hour, hh
דקה
"n"
minute, mi, n
שניה
"s"
second, ss, s
אלפית שניה
millisecond, ms
השוואה בין הפונקציות
שאילתות Access יכולות להכיל עמודות מחושבות שמשתמשות לעתים בפונקציות של Access כדי לקבל תוצאות. בעת העברת שאילתות ל- SQL Server, עליך להחליף את הפונקציה של Access בפונקציה מקבילה של TSQL, אם היא זמינה. אם לא קיימת פונקציה תואמת של TSQL, בדרך כלל תוכל ליצור עמודה מחושבת כדי לבצע את הפעולות הרצויות. TSQL כולל מגוון רחב של פונקציות, ומומלץ לעיין בפונקציות הזמינות. לקבלת מידע נוסף, ראה מהן הפונקציות של מסד הנתונים של SQL?.
הטבלה הבאה מציגה את הפונקציות של Access שקיימות עבורן פונקציות תואמות של TSQL.
קטגוריה של Access |
פונקציה של Access |
פונקציה של TSQL |
המרה |
||
המרה |
||
המרה |
||
המרה |
||
המרה |
||
המרה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
תאריך/שעה |
||
צבירה המופעלת על תחום |
||
מתמטיקה |
||
מתמטיקה |
||
מתמטיקה |
||
מתמטיקה |
||
מתמטיקה |
||
מתמטיקה |
||
מתמטיקה |
||
מתמטיקה |
||
מתמטיקה |
||
מתמטיקה |
||
מתמטיקה |
||
זרימת תוכנית |
||
זרימת תוכנית |
||
סטטיסטי |
||
צבירה של SQL |
||
צבירה של SQL |
||
צבירה של SQL |
||
צבירה של SQL |
||
צבירה של SQL |
||
טקסט |
||
טקסט |
||
טקסט |
||
טקסט |
||
טקסט |
||
טקסט |
||
טקסט |
||
טקסט |
||
טקסט |