דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. שאילתת UPDATE SQL

שאילתת UPDATE SQL

מתוזמן נעוץ נעול הועבר ארכיון code613m
2 פוסטים 1 כותבים 229 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארכיטקט
    כתב ב נערך לאחרונה על ידי
    #1

    שלום לכולם

    שאילתת 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)

    אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

    תגובה 1 תגובה אחרונה
    0
    • א מנותק
      א מנותק
      ארכיטקט
      כתב ב נערך לאחרונה על ידי
      #2

      אז מסתבר שזה פשוט להחריד, וזאת תגלית מדהימה על התנהגות של 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)

      אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

      תגובה 1 תגובה אחרונה
      1

      בא תתחבר לדף היומי!
      • התחברות

      • אין לך חשבון עדיין? הרשמה

      • התחברו או הירשמו כדי לחפש.
      • פוסט ראשון
        פוסט אחרון
      0
      • דף הבית
      • קטגוריות
      • פוסטים אחרונים
      • משתמשים
      • חיפוש
      • חוקי הפורום