הלוח העברי בעזרת TSQL (2)

31/03/2011

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

הלוח העברי בעזרת TSQL

29/03/2011

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

פרוצדורה להשוואת טבלאות בין הפיתוח לייצור

21/03/2011

לפני שנה בדיוק פירסמתי פוסט לגבי השוואה בין טבלאות. אני והקולגות משתמשים בשיטה הזו לא מעט, ולנוחות כולם כתבתי פרוצדורה פשוטה שמקבלת כקלט שם של טבלה, מבצעת את ההשוואה, וגם מדפיסה כבונוס את פקודת ה-SQL למי שירצה לשחק איתה, להגביל אותה, או לחקור אותה:   Create Proc P_TblDif @Tbl As Sysname, @RmtServer As Sysname='MyProdServer' As ...
תגובה אחת

דרך נוחה לעיון בקוד של פרוצדורות ואובייקטים אחרים (2)

16/03/2011

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

ביצוע שינויים בסכימה בעזרת סקריפט: כיצד למנוע שגיאות?

15/03/2011

במקומות עבודה מסודרים (לא כאלה שמפתחים על ה-Production..) מקובל ליצור סקריפט העברת גרסה שכולל בדרך כלל: 1. פקודות Create לאובייקטים חדשים שיש ליצור. 2. פקודות Alter לאובייקטים קיימים שיש לשנות. 3. הוספה ושינוי נתונים בטבלאות ניהול. 4. הרשאות (בדרך כלל בהמשך ל-Create הנ"ל). 5. שונות.. הסקריפט צריך להיות בנוי כך שהרצה כפולה שלו לא תגרום נזקים, למשל: בהמשך לסעיף 1 - לא תנסה ליצור אובייקטים שכבר נוצרו, ובהמשך לסעיף 3 - לא תנסה להוסיף נתונים שכבר קיימים. מדוע שתתרחש הרצה כפולה? טעויות אנוש, שכחנו שהרצנו כבר וניסינו שוב, רצינו לבדוק...
אין תגובות

לכידת פלט פרוצדורה (2)

12/03/2011

בפוסט קודם הראתי כיצד ללכוד פלט פרוצדורה, כשהדגש היה על הפלט המופנה ללשונית ה-Messages (בתחתית צילום המסך): את הפלט המופנה ללשונית ה-Results ניתן להפנות לטבלה ולשלוף ממנה לאחר מכן. למשל: Create Table #SP_Who(spid Int, ecid Int, status Varchar(20), ...
אין תגובות

הפקודה הכי מיותרת ב-TSQL

10/03/2011

ב-TSQL יש פקודות רבות. לחלקן אין תחליף ובלעדיהן השפה תהיה כמכונית בלי גלגלים: Select, From, ולחלקן יש שימוש פה ושימוש שם, אולי לא כולם עושים בהן שימוש תדיר, אבל טוב שהן קיימות בבחינת- אין פקודה אשר אין לה שעה: GetDate, Reverse, Float.. מדי פעם אני מגלה פקודה חדשה שלא ידעתי על קיומה, מהרהר ובונה תסריט דמיוני בו יש בה צורך, וחיש ניגש לכתוב פוסט בו אני מייחס את התסריט ל"מספר לקוחות התקשרו אלי לאחרונה ושאלו האם וכיצד.." ומספר עד כמה ערכה לא יסולא בפז (כמובן- בהנחה שהתסריט הדמיוני...
תגיות: , , ,
אין תגובות

פונקציות עזר לחקירת טבלאות מערכת

09/03/2011

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

חיפוש עם תווים בעייתיים (2)

07/03/2011

לפני קרוב לשנה כתבתי על שימוש באופרטור Like תוך שימוש בתווים בעייתיים. הצעתי פתרון כללי העושה שימוש ב-Replace, ופתרון ספציפי לתו הג'וקר %. גם הסוגריים המרובעים יוצרים בעיות מכיוון שמשתמשים בהם לתחימת התווים הבעייתיים עצמם.. מה עושים? הפתרון הוא להקיף את הסוגר המרובע הפותח בסוגריים מרובעים ]. את הסוגר המסיים יש להשאיר כמו שהוא. למשל (ניצור טבלה זמנית ונכניס לתוכה מחרוזת אחת לנסיון)- Create Table #T(Txt Varchar(Max)); ...
תגיות: , , ,
אין תגובות

טרנזקציות מקוננות

05/03/2011

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