עבודתי כל כך סודית שאני עצמי אינני יודע מה אני עושה

31/01/2011

סטיקר מלפני הרבה שנים שנזכרתי בו לאחר שקראתי את המאמר Understanding SQL Server 2008 R2 Fixed Database Level Roles של Satnam Singh, שהוא מסוג המאמרים הטכניים שאני אוהב לקרוא ומשתדל לכתוב: הכל מוסבר בפרוטרוט בצירוף צילום מסכים, בהנחה שהקורא (כלומר- אני) אינו חכם במיוחד; או אם להיות יותר רציניים- אני משתדל לכתוב כך שזה מה שהייתי רוצה לקרוא לפני שהתעמקתי בנושא וכשלא שלטתי בחומר. המאמר מציין שניתן לתת ל-User (ברמת הדטבייס) הרשאות קריאה בלבד DB_DataReader, או לחילופין הרשאות כתיבה בלבד - DB_DataWriter (קצת מזכיר את הבדיחה על שני השוטרים- זה שקורא וזה שכותב); ובמקרה השני המשתמש יכול להכניס...

טרנזקציה אחת רחוק מדי

17/01/2011

כתבתי פרוצדורה הכוללת שימוש בטרנזקציות, ולסיום - רק כדי כדי להיות בטוח שלא השארתי אף טרנזקציה פתוחה בטעות - כתבתי את הקוד הבא: While @@TranCount>0 Commit Tran; כשהרצתי קיבלתי הודעת שגיאה חוזרת ונשנית, ולקח לי זמן להבין את הסיבה לכך: את הפרוצדורה שכתבתי הפעלתי באמצעות פרוצדורה אחרת שכללה פתיחה של טרנזקציה, וכתוצאה מהקוד הנ"ל- כל הטרנזקציות נסגרו, כולל זו של הפרוצדורה המפעילה, וזה יצר את השגיאה. רציתי להיות בטוח שהכל בסדר ויריתי לעצמי כדור ברגל.. מסקנה: יותר טוב להיות עשיר וחכם מאשר עני וטיפש.:-(
אין תגובות

הרשאות צפיה בטבלאות מערכת

16/01/2011

הרשאה לעיין בטבלאות המערכת או באובייקטים כדוגמת פרוצדורות ו-Views ניתנת על ידי View Definition. ניצור Login ו-User ב-tempdb, ופרוצדורה סתמית לצורך ההדגמה: Use tempdb; Go   Create Login MyLogin With Password='1234',Check_Policy=Off; Go   Create User MyUser For Login MyLogin; Go   Create Proc MyProc As Select GetDate() Taarih; Go כעת ננסה לעיין בטבלת המערכת sys.objects ולקבל את ההגדרה...
אין תגובות

עיצוב פקודות SQL דינאמיות

14/01/2011

פקודת SQL אמורה להיות מעוצבת בצורה נוחה לקריאה מבחינת מעברי שורות, הזחה (Identization), שימוש ב-Capitals & Italics וכו'. אין לכך השפעה על הביצועים של המערכת, אבל כן על הביצועים של המפתח - ובעיקר אם לא הוא זה שכתב את הקוד: קשה להבין קוד שאינו ערוך נכון, וכשאני מתבקש לדבג או לתקן קטע קוד - אני קודם כל מסדר אותו בצורה נוחה לפני שאני צולל לעובי הקורה.. כך גם בעת שימוש ב-SQL דינאמי: פקודות ה-SQL נוצרות ומורצות על ידי הקוד, לא תמיד פשוט לבנות נכון את הפקודות, וגם אותן יש לדבג ולעיתים אף לשמור בטבלת לוג...
תגובה אחת

הודעות שגיאה: השימוש ב-RaisError וב-Throw

13/01/2011

הקדמה: לקבל הודעות שגיאה לא מסובך, והמערכת "מפנקת" אותנו בכאלו על ימין ועל שמאל: בעיות בחומרה, בעיות בתוכנה, באגים של מיקרוסופט, באגים שלנו, שימוש שגוי על ידי המשתמשים.. השימוש ב-RaisError והחל מהגרסה הבאה - גם ב-Throw - מאפשר למתכנת ה-SQL ליזום הודעות שגיאה בעצמו. במה דברים אמורים? נניח שבנינו טבלה, הגדרנו לה מפתח ראשי, וכעת אם מישהו מנסה להכניס בכל דרך שהיא מפתח קיים לטבלה- הוא מקבל הודעת שגיאה. באופן דומה ניתן להגדיר Rules ו-Constraints מסוגים שונים לשמירה על איכות הנתונים ברמת הטבלה. לעיתים נרצה להגן על הנתונים באופן פרואקטיבי ולבדוק אותם לפני הכנסתם לטבלה, כדי...
אין תגובות

הצגת סטים בלתי תלויים במבנה טבלאי מאוחד

11/01/2011

הכותרת המעט מסורבלת של הפוסט מתייחסת לשאלה ששאל הרב דוט נט: כיצד מאחדים את הסט 1 2 3 4 עם הסט A B C D לסט מאוחד 1,A 2,B 3,C 4,D והתשובה הנכונה כעקרון שהוא הציג היא למספר כל סט באמצעות Row_Number ולבצע Join בינהם. נכון כעקרון מכיוון שמדובר במקרה פרטי בו יש שני סטים בלבד, ואורכם זהה; אבל מה יקרה אם יהיו יותר סטים ואורכם לא זהה? נניח שאנחנו מעוניינים להציג סט בו בעמודה אחת יופיעו הטבלאות, בעמודה השניה ה-Views,...
אין תגובות

חסכו ואמצו: Sparse Columns – מבט נוסף

08/01/2011

כתבתי פוסט ביקורתי בנושא לפני מספר ימים, וקיבלתי תגובות מחכימות ממיכאל זילברשטיין ורונן טל- שניהם בעלי נסיון בתחום, ומי אני שרק כתבתי פוסט שאתווכח איתם? הם צודקים: נכון שבטבלה בת עמודה אחת לא מרוויחים הרבה, אבל כשבודקים בטבלה מרובת עמודות - אז המצב שונה. ניצור שוב שתי טבלאות, הפעם בנות 100 עמדות Int, כשבראשונה הן Sparse ובשניה לא: Use tempdb; Go   If Object_Id('T1') Is Not Null Drop Table T1; If Object_Id('T2') Is...
אין תגובות

Execute As & With Execute As

06/01/2011

האופרטור Execute As מאפשר לבצע פעולות תחת זהות אחרת מזו שלנו, ללא צורך להתחבר בזהות אחרת, למשל- כדי לבצע בדיקות שהקוד שנכתב על ידי המפתח שיש לא הרשאות יחסית גבוהות יעבוד גם כשיופעל על ידי משתמש שהרשאותיו נמוכות, או לחילופין- להגדיר שקוד מסויים ירוץ בזהות גבוהה מזו של המשתמש. כמובן שבעל הרשאות נמוכות לא יכול להשתמש ב-Execute As כדי לאמץ לעצמו זהות של System Administartor.. דוגמה- ניצור Login חדש במערכת ו-User המשוייך לו: Use tempdb; Go   ...
אין תגובות

השימוש ב-Extended Properties

05/01/2011

לאובייקטים שונים ב-SQL Server ניתן להוסיף ערכים והסברים באמצעות Extended Properties. דרך הממשק הגרפי של ה-SSMS - קליק ימני על האובייקט ו-Properties, בחלון שנפתח בוחרים ב- Extended Properties, וניתן להוסיף שורות באופן חופשי הכוללות Name (סעיף) ו-Value (תיאור, ערך). מידע שניתן להוסיף- מקור הנתונים האובייקט, תיאור כללי שלו, שם האפיון במערכת וכו'. רצוי כמובן שה-Name יהיה סטנדרטי כדי שיהיה ניתן לתחקר את ה-Extended Properties בקלות: בדוגמה הזו הכותרת של תיאור הטבלה הוא MS_Description, ורצוי שזו תהיה הכותרת בכל תיאורי האובייקטים כדי שניתן יהיה לשלוף אותם בקלות מטבלאות המערכת. ניתן להוסיף Extended...
אין תגובות