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

יום חמישי, יוני 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, אך אבוי: הטבלאות יכולות להתקיים במקביל, אך המפתחות הראשיים...
אין תגובות

בניית אינדקסים על עמודה בעלת Foreign Key

יום רביעי, אוקטובר 2, 2013

כשמוגדר Foreign Key המציין יחס של אחת לרבים (1:N), רצוי ליצור אינדקסים על עמודות שנמצאות בצד הרבים. אינדקס בצד האחת בוודאי יש מכיוון שהעמודה שם אמורה להיות Foreign Key, ובתור שכזאת היא מאונדקסת. להמחשה ניצור שני עותקים של sys.languages ושני עותקים של sys.messages, כאשר עמודת language_id בשניה יש לה Foreign Key לעמודת המפתח lcid שבראשונה; ברם- בעותק הראשון של sys.messages לא ניצור אינדקס על language_id ובעותק השני כן: If Object_ID('T_Messages1','U') Is Not Null Drop Table...
אין תגובות

טבלה בת שורה אחת

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

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

מציאת התאמות לפי קריטריונים גמישים

יום שלישי, אוגוסט 31, 2010

בפורום בסיסי נתונים שבתפוז הופיעה שאלה לגבי התאמת מועמדים למכללות: יש מועמדים כשלגבי כל אחד יש נתונים אם שירת בצבא, יש לו בגרות, עשה  יח"ל במתימטיקה וכו'; ויש מכללות שתנאי הקבלה שלהן יכולים לכלול חלק מהסעיפים הנ"ל; ויש למצוא איזה מועמד מתאים לאיזו מכללה. הפתרון הראשון שעלה בדעתי הוא לצרף לטבלת המועמדים עמודות כן/לא בהתאם לתנאים, לצרף לטבלת המכללות עמודות כן/לא בהתאם, ולשלוף כך: Select * From Students S Inner Join Universities U On S.Army>=U.Army And S.Bagrut>=U.Bagrut And S.Math5>=U.Math5; Go הבעייה בפתרון הוא היעדר גמישות:...
אין תגובות

Execution Plan: ביצוע Join בין שתי טבלאות

יום שני, יוני 21, 2010

הבנת Execution Plans (להלן EP) זו משימה די בסיסית של כל מפתח או DBA. אישית- עד היום אני די מתקשה עם הנושא, ובדיונים בהם מוצגים EP אני מתרשם שאינני היחיד שידיעותיו לוקות בחסר. אנסה כתרגול לבחון EP במצבים שונים ולרדת לעומקם. ניצור שתי טבלאות נטולות אינדקסים – T1 עם 1000 המספרים השלמים 1..1000 (ועוד שדה טקסטואלי), ו-T2 עם 500 המספרים הזוגיים 2..1000 (ועוד שדה מספרי ושדה טקסטואלי) – פעם עם I=1 ופעם עם I=2 (כלומר- בכל טבלה יש 1000 שורות): If Object_Id('T2') Is Not Null Drop Table T2; Go If Object_Id('T1') Is Not Null Drop Table T1; Go With T As (Select 1 N, ...