
SET IDENTITY_INSERT. לאחר ההכנסה מחזירים את האפשרות ל-off. המספור ממשיך מהערך הגבוה ביותר, גם כשההכנסה המפורשת מנותקת.getdate() לעמודת תאריך התחלת עבודה. כדי להפוך את העמודה לחובה, נדרש לתקן קודם שורות ריקות.SELECT ... INTO #tbl WHERE 1=2 יוצר טבלה ריקה עם מבנה זהה לטבלה המקורית.inserted מכילה את השורות שמוכנסות כרגע.SCOPE_IDENTITY() מחזיר את הערך האחרון שהוכנס על ידי הפקודה בסשן שלה. @@IDENTITY עלול להחזיר ערך מטבלה אחרת, למשל טבלה שהופעלה דרך טריגר. בטבלת הלוג בהרצאה עמודת המזהה הועתקה כערך רגיל, ולא נוצרה מחדש.הטקסט המלא של הדקות הראשונות בהרצאה «הוספת שורה לטבלה למתקדמים - Insert» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, ברוכים הבאים להרצאה על אינסרט. בהרצאה הזאת אנחנו נראה אינסרט עם ממשק גרפי. אחרי זה נראה אינסרט עם פקודות, אינסרט עם דיפולט, אינסרט לתוך טבלה זמנית, אינסרט לטבלה של היסטוריה, לטבלה של לוג.
אחרי זה נדבר על כל מיני משתני סביבה שמאוד חשובים לנו. אז בואו נתחיל. קודם כל אינסרט דרך ממשק גרפי. מאוד פשוט, אנחנו מגיעים לטבלה, עושים Edit, 200 והכלי הגרפי הזה יודע לתת לנו עריכה שימו לב העמודה הזאת אנחנו לא יכולים להכניס בה כלום למה אנחנו לא
יכולים להכניס בה כלום בואו ניכנס לדיזיין ונראה שעל העמודה הראשונה שזה employeeid יש לנו פונה כזאת שנקראת identity identity זה אומר שהוא סופר לבד החל מערך אחד וכל הזמן ברצף זה נקרא identity והוא פשוט עושה לי את השירות הזה של לספור לבד אם אני מוסיף שורה ואחרי זה מוחק אותה הוא לא ממלא את החורים הוא ממשיך לספור קדימה גם אם מחקתי
איזושהי שורה זה לא מעניין אותו הוא תמיד סופר קדימה אז השירות כזה של אדנטיטי בגלל זה אני לא יכול פה להכניס employee ID כי הוא סופר לי לבד הלאה last name זה עמודה שאני יכול להכניס לה ערך בוא ננסה להכניס לה ערך לדוגמה פרקטיק U בן אדם שקוראים לו פרקטיק U הגיע אלינו לעבוד ואם אנחנו מנסים עכשיו לעלות לשורה אחרת או להכניס עוד ערך, לרדת שורה להכניס עוד ערך,
הוא אומר שהוא לא מוכן. הוא אומר אני לא מוכן לעדכן את הטבלה הזאת, כי בטבלת employees אתה לא יכול להכניס ערך null לעמודה first name. אתה לא יכול להכניס ערך null, null זה ריק, לדלג על עמודה שנקראת first name.
זאת אומרת העמודה הזאת פה חווה. למה העמודה הזאת חובה ולמה העמודות האחרות הן לא חובה, נניח קוראים לתלמיד הזה פרקטי קיו יוני ואם אני יורד למטה הוא כן נותן, למה פה אפשר לדלג וכאן אי אפשר היה לדלג?
כי שימו לב, יש פה תכונה אלו נאלס, האם אפשר לדלג, האם אפשר להכניס ריק, נאלס זה ריק ואנחנו רואים ששלוש עמודות ראשונות חייבים למלא אותן ואת האחרות לא חייבים למלא.
שימו לב אני יכול להכניס עובד חדש בלי טייטל ובלי תאריך יום הולדת למה כי אני עדיין לא יודע את התאריך יום הולדת שלו אבל יום שבו הוא מתחיל לעבוד אני יכול להכניס יותר מאוחר נניח אנחנו רוצים ברטרואקטיבי להכניס לו יום שימו לב כל העמודות האלו הם לא חובה חוץ משלוש הראשונות כאשר העמודה הראשונה היא גם אוטומטית היא חובה אבל מחשב לבד ממלא אותה הנה הוספנו
פה בן אדם והגיעה פה גם אחות של יוני היא הגיעה לעבוד שקוראים לה ליזה היא גם הגיעה לעבוד והנה היא מתחילה לעבוד אבל אצלה אנחנו כבר יודעים שהיא מיסז והוא מיסטר עכשיו אם אני רוצה לעשות שהעמודה הזאת היא חובה אז אני יכול להוריד את הלאו נאלס ואז ברגע שאני מוריד לה את הווי ושומר אותה עכשיו אני לא אוכל להוסיף עוד איזשהו מישהו בלי
לציין לו את העמודה הזאת הוא לא נותן לי למה כי אני חייב לציין עכשיו שימו לב אין לו בדיקה אני יכול לעבוד עליו אני יכול לעשות לו אה אה אה הוא לא מספיק חכם אפשר לשים לו אילוץ אילוצים ולעשות לו בדיקה על העמודה הזאת אבל בינתיים אין את זה אז אפשר לעבוד עליו ולהכניס לו סתם
ערכים לא נכונים הוא לא יודע לעלות על זה אבל זה אחד הדברים שאיש dba צריך לעשות לעשות על העמודות עוד בדיקות חוץ מאלאו נאל אז הנאל הזה מגן נגד זה שאני אשכח אבל לא יותר מזה הוא לא יודע לבדוק נכונות בשביל זה יש check constraint שיודע לבדוק את זה מצוין ראינו איך מכניסים בגרפים ושמתם לב שזה לא התחיל מ-10,
יש פה דילוג. למה? כי מחקתי כמה שורות לפני כן. עכשיו אני מוחק את שלושת אלו, נמחק את שלושת השורות האלו וגם נחזיר פה שזה שדה לא יהיה חובה, שיהיה לי יותר קל, יופי.
עכשיו אני רוצה להכניס לפה ערכים דרך פקודות. בואו נעשה, עכשיו עשינו את הגווי, ראינו איך עובדים עם ממשק גרפי, ושימו לב, הממשק גרפי הזה הוא כותב פקודות sql במקומנו ושולח אותם לשרת.
למעשה שרת sql, אני אספר לכם סוד, זה לא באמת שרת, זה שירות שרץ ברקע, שירות של sql שרץ ברקע ואנחנו בסרוויסים יכולים לראות אותו והקליינט הזה שולח לסרוויס הזה את הפקודות.
אז כל מה שאני כותב או עושה בממשק גרפי בסוף בסוף זה פקודות sql שהקליינט הזה, התוכנה הזאת שולחת לשרת SQL Server שאני גם השרת על המחשב הזה יש לי גם שרת וגם קליינט אז למעשה הקליינט התוכנה הזאת שולחת לשרת הזה את הפקודות SQL וזה אחד מהקליינטים יש המון קליינטים שיודעים ככה בגרפי להפוך אותם לפקודות ואנחנו ממשיכים לתוך insert values בואו נעשה את זה בפקודה אנחנו עושים עכשיו אותו דבר רק בפקודות
אנחנו מכניסים לתוך טבלה שנקראת employees ואז זה שם המלא של הטבלה, שם של היוזר שיצר אותה, נקודה השם שלה, שזה גם נקרא סכמה, אבל כרגע זה לא מעניין, אז אנחנו נותנים את השם המקוצר, כי אצלי כל הטבלאות הן מאותו שם וגם זה ה-Default אצלי. בואו נעשה Insert Employees ונגיד
שאנחנו רוצים להכניס ערכים לשתי עמודות. לאיזה עמודות? לעמודות שאנחנו חייבים להכניס עליהם ערכים, מה שנקרא Not Null. שימו לב, Employee ID אני לא יכול אגד, הוא ייתן לי שגיאה אם אני אנסה להכניס.
כל מה שאני מנסה לא לעשות חוקי, אין לו בעיה שאני אעשה דברים לא חוקית, הוא פשוט ייתן לי הודעת שגיאה וזהו. אז אני מציין לו איזה עמודות אני רוצה להכניס להם ערכים, ועכשיו אני אומר לו values ואיזה ערכים אני רוצה לשים.
הבן אדם הראשון, שם משפחה שלו יהיה פרקטי קיו, ושם הפרטי שלו יהיה יונתן, ואנחנו מכניסים אותו לתוך טבלת employees. מקבלים הודעה פה one row effected, זה אומר שטופלה שורה אחת ואני יכול גם לעשות פסיק וישר להכניס שני שורות בבקשה אני מכניס שתי שורות פרקטיקיו יונתן ופרקטיקיו ליזה זה לא באמת שמשפחה פרקטיקיו אנחנו עושים אינסרט
ועכשיו שני שורות נכנסו ביחד בוא נסתכל לתוך הטבלה שלנו אנחנו נעשה סלקט כוכבית from employees ונסתכל בתוך הטבלה שלנו אנחנו רואים כאן שיש לנו מפעם ראשונה שהרצנו את זה ומפעמיים הבאות שהרצנו אז יש לנו פעמיים אותו עובד שימו לב יש פה בעיה שדאטאבייס לא יודע לאבחן שני אנשים עם אותו שם ונותן לזה להיכנס
אנחנו בתור מנהלים של הדאטאבייס יכולים להגיד לו תקשיב לא ייתכן מצב ששני אלו יהיו אותו דבר זה נקרא לעשות יוניק ייחודי אינדקס יוניק אינדקס אינדקס שבודק ייחודיות בסופו של דבר יש לנו אינדקס שבודק ששני אלו הזוג הזה לא יכול לחזור עוד פעם בדאטאבייס ואם
כן הוא נותן הודעת שגיאה בואו ננסה לעשות טעות ולהכניס פה ערך שאסור לי נניח אני אעשה פה 1 פסיק אתם יודעים מה שהוא לא יגיד שיש 1 כבר 99 ו-98 סתם דוגמא הסדר פה לא משנה אני אפילו לא צריך את זה, אני מכניס עוד פעם את יונתן ב-99 והוא אומר לי, cannot insert explicit value into identity column
אתה לא יכול להכניס ערכים מפורשים, מה שבא לך, לתוך identity column אני אספר לכם סוד, הוא נותן פה רמס שאפשר זמנית לכבות את ה-identity הזה לכבות אותו, להכניס מה שבא לי ואחרי זה להדליק אותו זה שירות שבא לעזור לך, זה לא משהו שמכריח, אבל אם הוא פועל אז הוא שולט
יפה, אז ראינו שאפשר להכניס ערך אחד ראינו שאפשר להכניס שני ערכים ראינו שאם קורית שגיאה פשוט הסרוויס לא נותן למידע שגוי להיכנס לדאטאבייס ואתם יכולים לראות שאין פה 99 עכשיו אנחנו רוצים להמשיך הלאה ולראות מה זה דיפולטים מה זה ערך ברירת מחדל זה דבר מאוד מאוד נוח
אם אנחנו ניכנס לדיזיין של הטבלה אנחנו יכולים להגיד תקשיב כשמגיע עובד חדש אני לא רוצה שתאפשר יום קבלת העובד hire date שיהיה נעל, אין אצלי כזה, תן לו איזשהו דיפולט, דיפולט של מה שיש עכשיו, של פונקציית getDate.
הדיפולט שלו יהיה החזר של פונקציה getDate. זה אומר שאם שוכחים להכניס לפה תאריך, שוכחים, תיקח את התאריך של עכשיו. אני אומר, תקשיב, אני לא מאפשר לך להיות ריק, אבל יש לך ערך דיפולטי.
עכשיו, הערך דיפולטי הזה הוא לא must, הוא לא חובה, זה רק אם לא הכניסו כלום. בואו ננסה לראות איך זה עובד, אנחנו שומרים את זה. גמרנו את זה, בואו נשאיר את זה לו נעל שלא יהיה לנו בעיות.
כן, השארתי את זה שמותר לעשות נעל אבל העובד החדש שייכנס יקבל גט דייט. בואו ננסה לעשות את זה.
נריץ עוד פעם את הפקודה, נקבל פעם שלישית אותו עובד לעבודה ונראה Select כוכבית From Employees ואנחנו רואים כאן שבעובד האחרון שימו לב נכנס כבר ערך.
לפני חניה נכנס נעל ועכשיו נכנס ערך. דרך אגב, אתם יודעים למה הוא לא אפשר לי להוריד אלא הוא נאלץ בגלל שיש פה שורות שמפריעות לו אם אני אעשה פה אדיטופ ואני אוריד את השורות שמפריעות לו את כל השורות האלו שהן פה בלי תאריך אם אני אוריד אותן עם שיפט אני עושה עם שיפט מסמן את שלושת השורות ואני מוחק אותן ועכשיו בכל השורות יש כבר ערכים כלשהם אז אני יכול לסגור את זה
לחזור לטבלת employees לעשות design ועכשיו ב higher date אני כן יוכל לחסום אפשרות להיות ריק. הנה הוא נתן לי. הוא נתן לי בגלל שאין שורות שמפירות את החוק הזה.
אז אנחנו רואים עכשיו שיש לנו בעצם פה עובד אחרון שיש לו את התאריך. שימו לב, עמודות אחרות הן ריקות לחלוטין כי לא הכנסתי בהן כלום. יכלתי להגיד להם לפרט עוד עמודה, כאילו אני יכול לקחת ולהוסיף עוד עמודה פה בפירוט כשאני מכניס ערכים.
אז עשינו insert עם default. default זה אומר שאני לא אומר משהו והוא לבד מכניס לי תאריך. שימו לב, הוא לבד מכניס לי תאריך כי יש לו ערך defaulty, ערך ברירת מחדל.
נתתי לו רק שתי עמודות והוא הכניס לי עמודה נוספת עוד ערך ועמודת אדנטיטי סופרת לבד. יופי. עכשיו בואו נדבר על תסריט מורכב, נניח יש לי תסריט מורכב ובתסריט המורכב אני צריך לעשות המון המון כל מיני חישובים ואני רוצה לעזור לעצמי עם טבלה זמנית ולהכניס לתוך הטבלה הזמנית חלק מהטבלה הזאת.
נניח אני צריך לחשב עכשיו ימי הולדת ולא יודע, להכין משהו, ואני צריך לעשות המון המון פעולות חישוב, ואני רוצה להקל על עצמי לא לכתוב הכל בשאילתה אחת גדולה ומסובכת אלא לחלק אותה לתתי חלקים.
אז אני רוצה לעשות טבלת עזר שהיא נניח כמה שורות מתוך הטבלה המקורית וכמה עמודות. אני רוצה רק נניח חמישה עובדים ראשוניים ורק שתי עמודות מתוכם ולהכניס את כל זה לטבלת עזר.
אז בואו נעשה טבלת עזר עם אותן עמודות כמו employees. אני אלמד אתכם טריק. Select כוכבית from employees מראה לי את הכל.
מחמישה עובדים ראשונים אני רוצה לקחת רק last name ו-birthday, אוקיי? רק שתי עמודות. ואת כל זה אני רוצה להכניס לתוך טבלה זמנית. בואו נעשה קודם כל טבלה זמנית.
Select כוכבית From Employees, נכון? תבחר את כל ה-employees, אבל תכניס את כל זה לתוך טבלה זמנית. הטבלה הזמנית נמצאת רק בזיכרון של המחשב ורק ליוזר שלי.
אני קורא לזה EmployeeTemps, שימו לב, היא תמיד מתחילה בסולמית. ואני אומר לו, תקשיב, המבנה שלה זה בדיוק כמו המבנה של טבלת Employees.
זאת אומרת, Select הזה נותן לי את כל העובדים. אם אני מוסיף פה into שם טבלה אחרת הוא בונה לי טבלה אחרת ונוצרת לי טבלה עם כל העובדים אבל אני רוצה רק את המבנה שלה אז אני אומר רק שורות שבהם 1 שווה 2 ברור שאין אף שורה ש-1 שווה 2 ואז מה שנוצר לי זה טבלה זמנית ריקה שימו לב נוצרת לי טבלה זמנית ריקה 0 rows 0 שורות כי באף שורה 1 לא שווה ל-2 אבל העתקתי את המבנה
ועכשיו יש לי מבנה של כל הטבלה, זמנית בזיכרון. מה זה אומר זמנית? זה אומר שאם אני פותח סשן אחר, אתם רואים, זה סשן 53. אם אני פותח סשן אחר, נניח 57, הוא כבר לא רואה את ה-employee Stamp הזה.
ה-employee Stamp הזה, עם סולמית בהתחלה, זמין אך ורק בסשן 53. כמו טבלת עזר זמנית בזיכרון, ולמעשה היא לא באמת בזיכרון, היא נשמרת בדאטאבייס שנקרא טמפ, בדאטאבייס זמני, טמפ דאטאבייס, יושבת באמת בארדיסק אבל לי זה מספיק טוב בשביל
לעשות את החישובים שלי ועכשיו שימו לב אני צריך למלא אותה אז מה אני עושה אני עושה ככה אני עושה אינסרט לתוך הטבלה הזמנית יכולתי לעשות גם טבלה רגילה זה לא משנה לו איזה עמודות איזה עמודות אני רוצה למלא אני רוצה למלא רק שתי עמודות אז אני אומר לו תקשיב כמו שעשינו פה אינסרט גם פה אנחנו עושים אינסרט ומפרטים את אותם עמודות
שתי עמודות אחרות ושימו לב במקום לרשום values אני במקום שורה של ואליוס רושם פקודת סלקט ומה שזה עושה הוא מבצע את הסלקט מחזיר את כל הסלקט הזה ומכניס אותו לתוך טבלה אחרת