לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 08-07-2008, 17:52
  Glaz Glaz אינו מחובר  
 
חבר מתאריך: 08.05.08
הודעות: 32
בעיה עם טריגר של update

אני כותב טריגר שמבצע איזו שהיא פעולה במקרה של update .
יש לי איתו שתי בעיות:
הראשונה והיותר דחופה היא שלפעמים מתבצע update גם שלא לצורך ז"א שאין שוב הבדל בשורה לפני הupdate ולאחריו
(אל תשאלו אותי למה זה קורה כי ככה זה! זו מערכת שנכתבה מזמן בצורה כזו ואני רק משפר אותה)
איך אני יכול לבדוק האם יש הבדל בין מה שהיה למה שעכשיו?
יש לי פיתרון שמבחינה לוגית (שלי) היה אמור לעבוד אבל עושה בעיות
(אם לא היה עדכון ממשי השורות יצטמצמו לשורה אחת בגלל ה union)




קוד:
DECLARE @iChangeData int SET @iChangeData = (select count(*) from (select * from inserted union select * from deleted) )




מה יכולה להיות הבעיה ו/או איך ניתן לעשות את זה בצורה שונה?

דבר שני:
היום הטריגר יכול לעבוד רק אם עושים update לשורה אחת
אם מנסים לעשות update לשתי שורות, מתקבלת הודעת שגיאה (והבעיה היא שהטבלה inserted מחזירה במצב זה יותר משורה אחת)
איך אפשר להתאים את הטריגר שיוכל לעבוד גם עם עדכון של יותר משורה אחת?
אני מצרף את מה שכתבתי בתקווה שלמישהו יהיה זמן, כח, וחשק לעיין בה ולכתוב לי את הערותיו והארותיו
תודה רבה


קוד:
CREATE TRIGGER [Update_new_data] ON [dbo].[Client_for_msf] FOR UPDATE AS BEGIN DECLARE @callsId int DECLARE @new_data int DECLARE @new_data_old int DECLARE @iChangeData int SET @callsId =(select callsId FROM inserted) SET @new_data =isnull((select new_data FROM inserted ),0) SET @new_data_old =isnull((select new_data FROM deleted ),0) SET @iChangeData = (select count(*) from (select * from inserted union select * from deleted) ) if @new_data_old = @new_data and @iChangeData > 1 BEGIN UPDATE Client_for_msf set new_data = 1 where callsId = @callsId END END







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

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 23:07

הדף נוצר ב 0.04 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר