מגבלות של פונקציות חלון

19/04/2014

פונקציות החלון שהתווספו ל-SQL Server ב”שתי פעימות” – בגרסת 2005 ובגרסת 2012 הוסיפו יכולות רבות לשפת TSQL וסייעו לסגור את הפערים מול שפות התכנות הפרוצדורליות.SQL כשפה דקלרטיבית שונה במהותה משפות התכנות הפרוצדורליות (C, Java, Basic לסוגיהם) בכך שאנחנו “אומרים” מה אנחנו רוצים (Select .. From .. Where) ולא איך לבצע את הפעולה. כמובן שזה מקל בביצוע משימות DML שגרתיות, אך מכביד בביצוע פעולות לא שגרתיות שבהם עלינו לחפש פטנטים יצירתיים כיצד להשתמש בפקודות הקיימות כך שנקבל את מבוקשנו; ולעיתים זה כרוך לא רק בפירוטכניקה וירטואוזית בכתיבת הקוד, אלא גם בביצועים גרועים.הנה למשל בעייה טיפוסית של חישוב סכום מצטבר לסט...
אין תגובות

דוגמה ליצירת אינדקס לטבלה

17/04/2014

לכאורה לא מסובך ליצור אינדקס לטבלה: נניח שהתבקשנו ליצור אינדקס בטבלה MyTbl על עמודה MyCol, אזי אנחנו מריצים את הפקודה הבאה- Create Index Idx_MyTbl_MyCol On MyTbl(MyCol); והנה יש לנו אינדקס כאשר אהבנו.. לא כך? לא כך! כאשר הייתי בתחילת דרכי ושמעתי שאינדקסים משפרים ביצועים באופן דרסטי (מה שנכון), חשבתי לתומי שכל מה שעלי לעשות זה ליצור אינדקס על כל עמודה בטבלה (כי הרי אין לדעת לפי מה המשתמשים ירצו לפלטר ולמיין אותה), וכבר ראיתי את עצמי בעיני רוחי כמו איזה אב"ג שמבין עניין, מתקתק בנון-שלאנטיות פקודות שאיש אינו מבין, אה-ווּאלָה!כמובן שמהר מאוד הבנתי שזה לא הולך כך ושאינדקסים כאלו יצרו...
תגיות: , ,
אין תגובות

מידע לגבי ערכי Identity

10/04/2014

Identity@@ ו-()Scope_Identity מחזירים את ערך ה-Identity האחרון שהוכנס לטבלה ב-Session בו אנו נמצאים,ו-(‘..’)Ident_Current מחזיר את ערך ה-Identity האחרון שהוכנס לטבלה בכלל (גם ב-Sessions אחרים).עשויים להיות הבדלים בין שני הראשונים כשמדובר במקרים מורכבים כמו פעולת Insert לטבלה אחת שמפעילה טריגר שמכניסה שורות לטבלה אחרת, אך לא אכנס לזה כאן, וכפי שנראה – במקרים פשוטים אין בינהן הבדלים. ניצור טבלה ובה עמודת Identity: Use tempdb; If Object_ID('T1') Is Not Null Drop Table T1; Create Table T1(ID Int Identity, I Int); נבדוק מה ה-Identity: Select @@Identity , ...
אין תגובות

כיצד מבצעים Restore לדטבייס?

04/04/2014

לא אמור להיות מסובך במיוחד: Restore + שם הדטבייס + שם הקובץ (פחות או יותר..).. רוב הסיכויים שנסתבך קצת אם נקבל קובץ גיבוי ומשימה לשחזר אותו, בעיקר כשהוא כולל מספר קבצים (mdf & ndf) בנוסף ללוג, וצריך להחליט היכן למקם כל אחד. המידע אמור להתקבל בעזרת הפקודה- Restore FileListOnly From Disk='\\MyPath\MyFile.bak'; ובקצת מאמץ ניתן לכתוב פרוצדורה שתקבל את שם הקובץ ושם הדטבייס ותיצור עבורנו את הפקודה בשלמותה.דוגמה- ניצור דטבייס חדש, ונגבה אותו (יש ליצור קודם לכן את כל המחיצות המתבקשות): Use master;Go Create Database MyDB On Primary (Name=MyDB1,FileName='C:\Tmp\Data\MyDB_Data1.mdf'), ...
תגיות: , ,
אין תגובות