מזל טוב ל 100 נושאים בפורום!!!
-
אני שמח להעלות את הנושא ה 101 שאינו דומה.... 100... ל... 101.....
תקוותי כי הפורום הזה ישרת את הציבור ההולך וגדל בצורה מקצועית, ויהיה גם עזר ומקור פרנסה לבני עמנו!הנושא ה 101 שלנו הוא טריגר sql שאמור לבדוק לפני הוספת רשומה ולהחליט האם לבטל את הוספת הרשומה או לא, מהי הדרך הטובה ביותר לעשות זאת.
כמובן שאין ברצוני לעשות טריגר של after insert ואחר כך להפעיל שאילתת מחיקה או פקודת מחיקה כלשהי. אני מעדיף לעשות את זה לפני ההוספה ואז פשוט "למנוע" את ההוספה, ובכן כאשר הפעלתי את זה ב Instead insert הסתבכתי הוא מחק לי רשומות גם אם התנאי לא התקיים, וגם כדאי מאוד אם אפשרי שהקאונטר של ה identity האוטומטי עדיין לא יופעל באם התנאי לא מתקיים, כלומר שלא יהיה שום זכר שמישהו ניסה בכלל להכניס כאן רשומה.דבר נוסף למי שיתהה למה לי טריגר הרי די באינדקס ייחודי מותנה בתנאי כלשהו, התשובה היא ששאלתי כאן את השאלה הזאת וענו לי שאין אפשרות לסנן אינדקס על ידי טבלה זרה, אז הדרך היחידה העומדת בפני היא טריגר בלבד.
אם יש רעיונות אשמח לשמוע!
פורסם במקור בפורום CODE613 ב28/12/2013 18:46 (+02:00)
-
ניסיתי, הבעיה עם זה היא שהוא מבטל את כל הטרנזקציות הפתוחות, והמדובר כאן שהטריגר הזה הוא צאצא נין ונכד לטרנזקציה שנמצאת 3 שלבים לפניו וכולם בטלים ומבוטלים לא שרירין ולא קיימין וכו', כנראה שביטול טרנזקציות זה באמת בנוסח של כל נדרי. אני צריך לבטל "רק" רשומה מסויימת. למעשה נכנעתי והפעלתי שאילתת מחיקה פשוטה.
מה שעוד גיליתי במסגרת החקירות בנושא הזה, שהטריגר מופעל "פר טרנזקציה" ולא פר רשומה. רוצה לומר, אם יש שאילתה שמוסיפה מאה רשומות, הטריגר לא מופעל 100 פעמים, אלא פעם אחת בלבד. והטבלה הזמנית inseted אכן מכילה את כל הרשומות שבטרנזקציה. זה כנראה נועד לחסוך בביצועים, אבל לדעתי היה צריך לעשות אופציה שהטריגר ירוץ על כל רשומה בנפרד, אבל זה כבר נושא למדיניות של מייקרוסופט, ואבא שלי תמיד אמר לי שאני לא ישנה את העולם, מה שממריץ אותי דווקא לנסות לשנות כדי לבדוק אם הוא צודק.......
פורסם במקור בפורום CODE613 ב31/12/2013 17:36 (+02:00)