שאילתת UPDATE SQL
-
שלום לכולם
שאילתת UPDATE ב SQL עושה פעולה של עדכון כל הרשומה בבת אחת, כלומר כל התייחסות לשדה בתוך המשפט עצמו, יביא את הערך שלו לפני העדכון.
דוגמא:declare @table table (val1 int , val2 int) insert into @table values (2,2) update @table set val1 +=1, val2 +=val1; select * from @table
התוצאה val2 = 4 כי הוא קיבל את הערך של val1 לפני העדכון ולא אחרי העדכון.
השאלה אם יש דרך להסתדר אחרת, כגון להכניס את הערך לתוך משתנה זמני בתוך השאילתה עצמה. אם יש למישהו רעיון אשמח לשמוע.
למה זה כל כך חשוב לי??? עניין של ביצועים, כאשר את השדה val1 אני מעדכן באמצעות פונקציה זוללת משאבים, ואני מעוניין בערך התוצאה פלוס משהו.כבר הוזכר ענין זה באשכול אחר שם זה היה בקוד ממש, אז הפתרון הוא פשוט להכניס למשתנה, אבל בתוך משפט SQL אי אפשר לדעתי לבנות משתנה. אז מה הפתרון??? אני יודע טבלה זמנית. טוב זה רק אם אין ברירה....
פורסם במקור בפורום CODE613 ב23/02/2014 15:38 (+02:00)
-
אז מסתבר שזה פשוט להחריד, וזאת תגלית מדהימה על התנהגות של SQL אפשר לשתול משתנה לכאורה שישרת את המטרה
הנה:declare @table table (val1 int , val2 int) declare @vlaue int insert into @table values (2,2) update @table set @vlaue = val1 +1, val1 = @vlaue , val2 += @vlaue ; select * from @table
והתוצאה val2 = 5 כצפוי!!
מה שאנו למדים שמשתנים מעודכנים מיידית, ואילו הטבלה מעודכנת אחרי סיום המשפט כולו!!!!
פורסם במקור בפורום CODE613 ב23/02/2014 15:56 (+02:00)