טריגר המחולל טריגרים

20/06/2012

נניח שיש לנו טבלה בשם T_Try001 הכוללת רשימה שלא אמורה להשתנות בדרך כלל (הגדרות, רשימת סניפים, רשימת תפקידים..), אנחנו מעוניינים לדעת מתי שינו אותה ולשם כך יוצרים טריגר המעדכן טבלת לוג בשם T_Log. פעם כתבתי על זה דוגמה מקיפה הכוללת את כל המידע שאנו עשויים להזדקק לו, אלא שכעת אצטמצם לתיעוד מינימלי ומי שירצה יוכל להרחיב את טבלת הלוג והטריגר: Use tempdb; go   Create Table T_Try001(I Int);   Create Table T_Log(ID Int...
תגובה אחת

התנייה במספר השורות

15/06/2012

אנחנו כותבים קוד שמבצע פעולה מסויימת רק אם מספר השורות בשליפה מסויימת גדול או שווה ל-2 (נניח). לפני שנתחיל לזרוק הצעות- ניצור טבלה מתאימה שיהיה על מה להתאמן: Use tempdb; Go   If Object_ID('Messages') Is Not Null Drop Table Messages; Go   Select * Into Messages From sys.messages;   Select ...
אין תגובות

משלוח מייל בסיום כל ג'וב

13/06/2012

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

רשומת ברירת מחדל

12/06/2012

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

דוגמה ליתרונות ולחסרונות של פונקציות החלון

04/06/2012

נתקלתי באחד הפורומים בשאלה הבאה (השואל תרגם שאלה אמיתית לדוגמה טכנית ואני תרגמתי אותה חזרה לדוגמה "הגיונית"): נתון קוד של אובייקט בדטבייס, ויש לשלוף את כל האובייקטים שהם מאותו סוג ומאותה סכימה כמוהו. כלומר- אם נתון המספר 1234 שהוא הקוד של טבלה מסכימה sales, יש לשלוף את פרטי כל הטבלאות מסכימה Sales. ניצור קודם כל העתק של sys.objects כדי שנעבוד מול טבלה אמיתית ולא מול view של המערכת: Use tempdb; Go   If Object_ID('T_Objects','U') Is Not...
אין תגובות