Azure תומכת בטבלאות זמניות גלובליות

יום רביעי, דצמבר 6, 2017

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

בעיות עם אובייקטים הקשורים לטבלאות זמניות

יום חמישי, יוני 26, 2014

כל מי שמכיר את SQL Server ולו באופן בסיסי, יודע שניתן ליצור טבלאות זמניות שמוכרות רק ב-Session בו הן נוצרו, וכך משתמשים שונים יכולים ליצור טבלאות זמניות בעלות שמות זהים במקביל; למשל- כשמספר משתמשים מריצים אותו סקריפט או אותה פרוצדורה בו זמנית.למשל- נריץ את הסקריפט הבא: Create Table #T(ID Int Not Null);Go כעת נפתח חלון חדש ב-SSMS (כלומר- New Query), נריץ אותו סקריפט, והטבלה תיווצר גם שם ללא בעיות.כעת נחזור לחלון הראשון וניצור מפתח ראשי: Alter Table #T Add Constraint PK_#T Primary Key Clustered(ID);Go נלך לחלון השני ליצור גם שם Primary Key, אך אבוי: הטבלאות יכולות להתקיים במקביל, אך המפתחות הראשיים...
אין תגובות

אילוצים על טבלאות זמניות

יום שישי, דצמבר 27, 2013

כידוע, ניתן ליצור טבלאות זמניות מקומיות (בעלות # אחת בתחילתן) בעלות שמות זהים ב-Sessions שונים בו זמנית: כל אחת מהן קיימת ב-Session שלה, בלתי נראית לאחרים, אינה מפריעה ואינה מופרעת..זאת ועוד- בעזרת SQL דינאמי ניתן ליצור מספר טבלאות זמניות בעלות אותו השם באותו Session, אך לא ארחיב כי זה לא הנושא כאן.ניצור טבלה כזו עם מפתח ואינדקס ב-Session אחד (כלומר- בחלון ב-SSMS): Create Table #T(ID Int Not Null, Txt Varchar(50));Go Alter Table #T Add Constraint PK_#T Primary Key(ID);Go Create Index Idx_#T_Txt On #T(Txt);Go כעת נפתח ב-SSMS חלון חדש (על ידי New Query), וניצור גם בו טבלה זמנית + מפתח + אינדקס,...
אין תגובות

Bug או Feature?: לא ניתן ליצור טבלה זמנית מותנית

יום ראשון, יולי 15, 2012

נניח שאני רוצה ליצור טבלה שהמבנה (DDL) והתכולה (DML) מותנים, לצורך הדוגמה- מותנים ביום בשבוע: Use tempdb; Go   If Object_ID('T_MyTbl','U') Is Not Null Drop Table T_MyTbl; Go   If DatePart(WeekDay,GetDate()) In (2,4,6) Select * Into T_MyTbl From sys.views; Else Select * Into T_MyTbl From sys.tables; מכיוון שהקוד הורץ היום – יום א' בשבוע – התבצעה...
אין תגובות

טרנזקציות ופעולות DDL

יום חמישי, דצמבר 23, 2010

טרנזקציות מקושרות בתודעתנו לפעולות DML (שינויים בנתוני הטבלאות): אם בתוך הטרנזקציה הוספנו, שינינו, מחקנו וכו', ולבסוף ביצענו Rollback - כל השינויים מתבטלים ואנחנו חוזרים לנקודת ההתחלה. ב-SQL Sever הטרנזקציות משפיעות גם על פעולות DDL (שינויים במבני טבלאות): יצירת אובייקטים, ביטול אובייקטים ושינוי אובייקטים. כך למשל פעולת -Truncate Table שהיא בעצם יצירה מחדש של הטבלה - המתבצעת בתוך טרנזקציה, תתבטל במקרה של Rollback. הייתה לי היום תזכורת מעט משעשעת (בדיעבד) לכך- אני כותב פרוצדורה מורכבת הכוללת שימוש בטבלאות זמניות בעזרת SQL דינאמי, ומכיוון שטבלאות זמניות פרטיות (בעלות #סולמית בודדת) נמחקות בסיום הפרוצדורה - במהלך הפיתוח אני משתמש בפרוצדורות...

אובייקטים זהים המתקיימים במקביל באותו Session

יום שני, ספטמבר 13, 2010

נתבונן בקטע הקוד הבא: Declare @I Int; Set @I=1; Select @@SpID ,@I ; יצרנו משתנה, הצבנו בו את הערך 1, והצגנו את מספר ה-Session שלנו ואת ערכו של המשתנה. כל בר דעת מבין שהמשתנה I@ התקיים במהלך הרצת הקוד ונעלם עם סיומו, ושיכול להיות רק משתנה אחד כזה באותה נקודת זמן באותו Session. כלומר- אני יכול לפתוח חלון Query חדש ושם להגדיר במקביל עוד משתנה I@ או להריץ סקריפט נוסף לאחר שהנ"ל הסתיים ושגם בו יוגדר I@, אבל באותו Session ובאותה נקודת זמן זה לא יתכן, ומי שינסה זאת יקבל הודעת שגיאה: Declare @I Int; Set @I=1; Declare @I Int; Msg 134, Level 15, State 1, Line 3 The...