הרצה של כמה שאילתות שתלויות זה בזה

26 באוגוסט 2010

תגיות: ,
5 תגובות


 


לפעמים רוצים להריץ כמה שאילתות של SQL אחד אחרי השני ברצף, עבור שאילתות שלא תלויים אחד בשני אפשר לעשות את זה עם   ;    למשל.

 



SELECT Id FROM Users;


 


UPDATE Links SET [Order] = 1 WHERE Id = 2;


 


UPDATE News SET [Name] = 'My Name' WHERE Id = 20;


 

אבל במידה והשאילתא השנייה תלוייה בראשונה, לדוגמא.

אתם רוצים להוסיף עמודה חדשה לטבלה קיימת שיש בה כבר שורות, אבל אתם רוצים שלא יוכלו להכניס בה ערכי NULL,

 

אתם לא יכולים לייצר אותה מראש בלי NULL מכיוון שכבר יש שורות, ולכן צריך להוסיף את העמודה, לעדכן את כל השורות ולעדכן את העמודה.

 

אם נריץ את השאילתה הבאה:

 



ALTER TABLE Users ADD [AllowQuestion] bit;


 


UPDATE Users SET AllowQuestion = 1;


 


ALTER TABLE Users ALTER COLUMN [AllowQuestion] bit not null;


 

תקבלו הודעת שגיאה – "Invalid column name AllowQuastion"

מכיוון שבהרצת השאילתא השנייה עדיין השאילתא הראשונה לא התבצעה/הסתיימה.

 

הפיתרן הוא להשתמש ב – BEGIN ו – END

 



GO


BEGIN


    ALTER TABLE Users ADD [AllowQuestion] bit;


END


 


GO


BEGIN


    UPDATE Users SET AllowQuestion = 1;


END


 


GO


BEGIN


    ALTER TABLE Users ALTER COLUMN [AllowQuestion] bit not null;


END

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

5 תגובות

  1. גרי רשף27 באוגוסט 2010 ב 9:17

    הרצתי את הרצף הבא בלי שום בעייה בפעם אחת:

    Create Table Users(I Int);
    ALTER TABLE Users ADD [AllowQuestion] bit;
    UPDATE Users SET AllowQuestion = 1;
    ALTER TABLE Users ALTER COLUMN [AllowQuestion] bit not null;
    Select * From Users;

    אני משתמש ב-2008R2.

    הגב
  2. Shlomo27 באוגוסט 2010 ב 11:03

    זה מכיון שהשאילתא ליצירת הטבלה היא באותה טרזנקצייה.

    נסה לייצר (ידנית – לא בעזרת סקריפט) טבלה.
    ואז להריץ את השאילתא להוספת עמודה

    הגב
  3. חיים27 באוגוסט 2010 ב 11:34

    זה לא BEGIN END מה שגורם לזה לעבוד.
    מילת המפתח שגרמה לזה לעבוד היא GO.

    הגב
  4. Shlomo27 באוגוסט 2010 ב 12:29

    נכון ותודה רבה

    הגב
  5. יחזקאל ב.13 בספטמבר 2010 ב 17:11

    אכן חיים צודק, ועוד משהו, הGO לא חוקי בSQL, כלומר לא ניתן לשמור אותו בSP.

    GO is not a Transact-SQL statement; it is a command recognized by the sqlcmd and osql utilities and SQL Server Management Studio Code editor.

    הגב