האם 'abc' שווה ל-' abc' ?

31/10/2013

נערוך בוחן פתע – אסור להציץ ואסור לנסות על המחשב, רק לחשוב ולומר מה יהיה הפלט של השליפה הבאה: Select Case When 'abc'='abc ' Then 1 Else 0 End; אני, אגב, נכשלתי: הייתי בטוח שהתשובה היא 0 שכן ברור שהמחרוזות אינן זהות ולשנייה יש כמה רווחים עודפים בסוף. אופס – גיליתי לכם את התשובה, אבל אני בטוח שכל הקוראים ידעו את התשובה הנכונה (כאמור- חוץ ממני).. הבעייה אינה נקודתית לשליפה הטכנית הנ"ל אלא לכל ההשוואות בין המחרוזות, למשל: Select * ...
אין תגובות

חישובי שעות עבודה לעובד המבולבל

28/10/2013

אלו מביננו שמעבירים כרטיס בשוכבם ובקומם, בהגיעם ובלכתם מכירים את הסיטואציה: הגענו לעבודה, איננו זוכרים אם בדרך העברנו כרטיס או לא, ולעיתים אנחנו מעבירים שוב ליתר בטחון; או עמדנו לצאת, העברנו כרטיס, אבל פתאום נקראנו בחזרה וכעת צריך להעביר כרטיס שוב כשאנחנו יוצאים "באמת". בהנחה שהמערכת מבחינה בין יציאות וכניסות – יש לבחור בכניסה הראשונה כשיש רצף של מספר כניסות, ובאחרונה כשיש רצף של מספר יציאות. ל-מ-ש-ל: If Object_ID('tempdb..#T','U') Is Not Null Drop Table #T; Create Table #T(ID Int, ...
תגיות: , ,
אין תגובות

חישוב נוכחות עובדים

23/10/2013

נתונה לנו טבלה בה נתוני כניסה ויציאה של עובדים, כשאנחנו מניחים לשם הפשטות שאיש לא שכח להעביר כרטיס (או לחילופין- שהטבלה טוייבה ואין בה חוסרים): Use tempdb; Go   If Object_ID('T_Nohehut','U') Is Not Null Drop Table T_Nohehut;   Create Table T_Nohehut(Oved Int Not Null, ...
תגיות: , ,
אין תגובות

תנאי DateTime=Date

15/10/2013

יש טבלה, בטבלה עמודת DateTime עם תאריכים לא שלמים (כוללים חלקי יממה), ואנחנו מחפשים את כל התאריכים בתוך יום מסויים. מה הדרך היעילה לעשות זאת? If Object_ID('tempdb..#Tmp','U') Is Not Null Drop Table #Tmp; Go   Select *, DateAdd(Millisecond,Cast(is_event_logged As Int),DateAdd(Second,severity,DateAdd(Minute,language_id,DateAdd(Month,message_id,0)))) Taarih Into #Tmp From sys.messages; Go   Create...
תגיות: , , , ,
אין תגובות

השוואה בין סכימות של טבלאות

13/10/2013

יש לנו סביבת פיתוח וסביבת טסטים, או אולי דטבייס מעודכן ודטביס מגיבוי, ואנחנו מעוניינים להשוות בין הטבלאות והעמודות בשני הדטבייסים. ניצור קודם כל שני דטבייסים להמחשה, ובהם טבלאות: T1 קיימת בראשון אך לא בשני, T2 קיימת בשני אך לא בראשון, T3 קיימת בשניהם אך עמודה I1 רק בראשון, I2 רק בשני, ו-I3 בשניהם, T4 קיימת בשניהם. Use master; Go   If DB_ID('Try1') Is Not Null Drop Database...
תגיות: , ,
אין תגובות

אינדקס עבור פעולות Distinct

11/10/2013

כיצד מאנדקסים טבלה עבור פעולת Distinct? ובאותה הזדמנות – מה ההבדל בין Distinct לביצוע Group By? ניצור שתי טבלאות טכניות (אין משמעות עסקית לתוכן) – אחת Heap ואחת עם Index לפי 3 העמודות שב-Distinct / Group By: If Object_ID('T_Messages','U') Is Not Null Drop Table T_Messages;   Select * Into T_Messages From sys.messages;   If Object_ID('T_Messages1','U') Is Not Null Drop Table T_Messages1; ...
אין תגובות

Clustered Index & Fill Factor ועם איזו מזוודה לנסוע לחו"ל?

08/10/2013

תזכורת לאלו ששכחו את החומר מהקורס ל-DBA-ים מתחילים: כשיוצרים טבלה או אינדקס ניתן להגדיר Fill Factor שמציין עד כמה למלא את ה-Pages בנתונים, מתוך כוונה להשאיר מקום פנוי לנתונים הבאים שיכנסו באמצע, כל זאת כדי למנוע Page Split – מצב בו ההמשך הסדרתי של דף מספר 100 אינו דף מספר 101 הסמוך אליו פיזית, אלא דף 1234 וממנו חזרה ל-101, מכיוון שהיה צורך "לדחוף" שורות חדשות באמצע ולא היה מקום. Brent Ozar סבור שההתעסקות בזה מיותרת, התועלת ממנה שולית, ובמקרים רבים שכרנו (השולי) יוצא בהפסדנו (הלא כל כך שולי). כך או כך ננסה לראות...
אין תגובות

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

02/10/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...
אין תגובות