sql server 2008, שאלה על טריגרים

sql server 2008, שאלה על טריגרים

יש לי database שמכיל בערך 20 טבלאות, ואני מעוניין ליצור להם טריגרים של for update.
עד כאן הכל פשוט, אלא שאני רוצה לבצע פעולות בטריגרים האלו רק במידה ושדות מסויימים השתנו.
אם היה מדובר על טריגר בודד, הייתי פשוט כותב השוואה בין inserted ל deleted, או משתמש בפונקציה update.
הבעיה היא שמדובר על כמות גדולה של טריגרים וחשבתי שאפשר אולי לכתוב את ההשוואה עצמה בתוך udf או stored procedure,
ופשוט להשתמש בה בכל אחד מהטריגרים,
השאלה היא איך אני מעביר את המידע מתוך ה inserted וה deleted לפונקציה או פרוצדורה?
כמובן, המטרה היא שהפונקציה\פרוצדורה תהיה אחידה לכל הטבלאות ולא אצטרך להגדיר את רשימת השדות לכל אחת מהטבלאות בנפרד.

לחילופין, האם יש איזה שהיא דרך להבין איך משתמשים ב updated_columns בלי לעשות תואר במתימטיקה? לא הצלחתי להבין כלום מהדוגמאות ב BOL.
 
הבעיה נפתרה!

למי שמעוניין לדעת איך - השתמשתי בשתי טבלאות זמניות כדי לקבל את המידע מ inserted ו deleted, וכתבתי פרוצדורה שמשתמשת בטבלאות האלו כדי לבדוק האם שינוי באחד מהשדות הרלוונטיים לפעולה.

עדיין יהיה נחמד לדעת איך להשתמש ב updated_columns כי נראה לי ששימוש יתר בטבלאות זמניות יכביד על המערכת.
 

pitoach

New member
COLUMNS_UPDATED היא לא הדרך היחידה

ניתן לקרוא על הפונקציה כולל קודים לדוגמה בבלוג הבא:
http://ariely.info/Blog/tabid/83/EntryId/105/COLUMNS_UPDATED.aspx

בסוף הבלוג יש קישור לבלוג אחר בנושא Change Data Capture. כדאי לבחון גם את ההתאמה של האפשרות של שימוש בדרך זו.

אני מקווה שזה יעשה מעט סדר ואם עולות שאלות אשמח להשיב
 

pitoach

New member
הפתרון שלך נשמע ממש ממש לא טוב


היית בכיוון נכון של שמוש ב updated_columns אז אל תתייאש כל כך מהר לפני שלמדת אותו


בדוק גם את השימוש ב CDC - Change Data Capture
 
למעלה