content top
כל הדרכים לפוצץ טבלה, חוץ מלתת לה לשוטט אקראית על הסט של רובוטריקים 3 – טיפ משולחנו של אורן בוני

כל הדרכים לפוצץ טבלה, חוץ מלתת לה לשוטט אקראית על הסט של רובוטריקים 3 – טיפ משולחנו של אורן בוני

מה קורה שרוצים לבצע כמה INSERTS מהירים ורבים לטבלה לצורכי בדיקות?

אפשרות 1: מחפשים כלי ב codeplex שמבצע את זה. אבל אז צריך להתקין וללמוד את הכלי, ולא תמיד מדיניות הארגון תאפשר להשתמש בו בסביבות Production.

אפשרות 2: לוקחים את ה טבלה בונים ל INSERT ומשכפלים אותם.

לדוגמה:

Create table TAB1

(

      id                int identity,

      Fname       varchar(15),

      Lname       varchar(25),

      Haddress    Varchar(100)

)

Go

Insert into TAB1 Values ('Oren','Bouni','Ramot Meir')

Insert into TAB1 Values ('Oren','Bouni','Ramot Meir')

Insert into TAB1 Values ('Oren','Bouni','Ramot Meir')

Insert into TAB1 Values ('Oren','Bouni','Ramot Meir')

 

אפשרות 3: מכינים לולאה שמכניסה ערך מס' פעמים:

 

declare @i int

Set @i=1

While @i < 100

      Begin

            Insert into TAB1 Values ('Oren','Bouni','Ramot Meir')

            set @i = @i+1

      end

 

אבל האפשרות הרביעית והפחות מוכרת היא באמצעות שימוש בפקודה GO.

פקודת GO  היא אינה פקודת TSQL אלא פקודה אשר מוכרת בסביבה של ה- Management Studio (SSMS) או על ידי ה-SQLCMD בלבד.

הפקודה GO  יכולה להיות להיות מורצת ע"י כל LOGIN ללא הרשאות מיוחדות.

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

Insert into TAB1 Values ('Oren','Bouni','Ramot Meir')

Go

הקוד לעיל יבצע את הפעולה פעם אחת.

Insert into TAB1 Values ('Oren','Bouni','Ramot Meir')

go 100

הקוד הזה, לעומת זאת, יבצע את הפקודה 100 פעמים.

יעיל ושימושי… בהצלחה.

 

אורן בוני הוא PFE במיקרוסופט ישראל.


7 תגובות על “כל הדרכים לפוצץ טבלה, חוץ מלתת לה לשוטט אקראית על הסט של רובוטריקים 3 – טיפ משולחנו של אורן בוני”

  1. מאת גיא ד.:

    מגניב לגמרי אורן!

    ממש שימושי כשרוצים להריץ קוד בצורה רב-פעמית.

  2. מאת עמית:

    אהמ…

    מה עם BCP?

  3. מאת chaum:

    תודה רבה.
    איפה היית עד היום?

  4. מאת ronen:

    והאפשרות החמישית שתאפשר לך להכניס גם מליון רשומות בלי להרגיש היא שימוש פשוט ב bulk Insert
    * שיטת השימוש ב go XXX מקבילה מבחינת מה שקורה מאחורי הקלעים לעבודה עם לולאה (רק נוח יותר כי הכתיבה קצרה יותר)
    החיסרון הוא שהפעולה שמבוצעת זהה ואינה תלויה במספר ההרצה הנוכחית של השאילתה בעוד בלולאה אפשר לבצע מניפולציות בקלות רבה יותר וכך למלא נתונים שונים בטבלה למשל לשם הדגמה
    כמובן שב Bulk Insert הגמישות מצד אחד הרבה יותר גבוהה אפילו מלולאה והחיסרון היחיד הוא שצריך להכין את הקובץ נתונים (ניתן להעזר במאקרו פשוט באקסל כדי ליצור רשומות דינאמית בלולאה -> ליצא לטקסט -> לייבא לטבלה ב bulk insert)

  5. נחמד. הרבה יותר מהיר מלולאה.
    אם רוצים למלא את הטבלה בערכים שונים אחד מהשני אפשר להשתמש בפונקציה RAND לצורך הפקת מספרים מקריים או להשתמש בטבלה אחרת מבסיס הנתונים:
    insert Tab1 (Name,Number)
    select top 1 Customer_Name,RAND() as Number
    from dmn_Customers
    order by NEWID()

    go 10

  6. מאת שניר א:

    אחלה פוסט אורן!
    וגם התגובות – איפה הייתם עד היום?..

    נזכור להבא.

  7. מאת יסכה:

    תודה רבה, עזרת לי מאד

כתיבת תגובה

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

one + 14 =