מדריך T-SQL - טבלאות זמניות


טבלאות זמניות ב-SQL SERVER

טבלאות זמניות הן טבלאות הנוצרות באופן, ובכן, זמני. כדי להיות יותר ספציפיים, הטבלאות נוצרות ב-tempdb שהוא בסיס נתונים השייך למערכת של SQL Server ומשמש לאחסון של אובייקטים זמניים (בדרך כלל ברמת ה-session). בפועל הטבלאות מאוחסנות בזיכרון (instance) של SQL Server כך שכמות המידע שהן מסוגלות להכיל נובעת ישירות מהמפרט הטכני של השרת שלנו וכמות זיכרון ה-Ram הזמינה לו.

ניתן לגשת או לתחקר טבלאות זמניות רק מהסשן הספציפי בו נוצרו, והן ימחקו מהזיכרון באופן אוטומטי ברגע שאותו סשן יסגר.

ברוב המקרים טבלאות זמניות משמשות להעברה של נתונים בין טבלאות, אחסון זמני של נתונים משאילתה כלשהי או קליטת נתונים ממשתנה טבלה, פונקציית טבלה או פרוצדורה.

יצירת טבלה זמנית

כדי ליצור טבלה זמנית יש להשתמש באותו הסינטקס שאיתו ניצור טבלה רגילה עם הבדל אחד קטן – לפני שם הטבלה יש לשים סולמית (#).

כאמור, כל טבלה זמנית שנגדיר תמיד תיווצר בבסיס הנתונים tempdb, גם אם יצרנו אותה מבסיס נתונים אחר.


כמו שכתבתי בהתחלת הפוסט, טבלה זמנית כזאת מתקיימת רק בגבולות הסשן (session) שבו נוצרה. אם ננסה להתחבר לאותו שרת ממחשב אחר לא נוכל לגשת לטבלה. גם אם ננסה להתנתק ולהתחבר מאותו מחשב – הסשן נסגר בעת הניתוק וחיבור מחדש יפתח סשן חדש שלא יכיר את הטבלה. ב-SQL Server כל טאב מהווה סשן בפני עצמו כך שאפילו אם נפתח טאב נוסף בזמן שהטאב המקורי פתוח, נוכל לגשת לטבלה רק מהטאב המקורי.


יצירת טבלאות זמניות גלובליות

סוג נוסף של טבלאות זמניות הן הטבלאות הגלובליות (Global Temporary Tables). כדי ליצור אותן יש לשים שתי סולמיות בתחילת שם הטבלה. ההבדל המהותי בין טבלאות גלובליות לטבלאות זמניות רגילות הוא שהשרת יאפשר גישה לטבלאות גלובליות ממספר בלתי מוגבל של סשנים כל עוד לפחות סשן מחובר לטבלה. ברגע שהמשתמש האחרון שמחובר לטבלה יתנתק, הטבלה נמחקת ולא ניתן לגשת אליה יותר.

בצילום המסך ניתן לראות שאני מצליח לתשאל טבלה זמנית גלובלית (מתחילה בשתי סולמיות) למרות שאני נמצא בטאב (סשן) שונה מזה שיצר אותה. כדי למחוק אותה עלי לסגור את שני הטאבים כך שאף סשן לא יהיה מחובר אל הטבלה.

© כל הזכויות שמורות לאלעד פלג הדרכות 2020