
IDENTITY_SEED ו-IDENTITY_INCREMENT לפי שם הטבלה.SET IDENTITY_INSERT טבלה ON.SET IDENTITY_INSERT טבלה OFF מחזיר את הניהול לדאטאבייס.DBCC CHECKIDENT מחזיר את הספירה לערך שבוחרים.הטקסט המלא של הדקות הראשונות בהרצאה «Identity» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם שיעורנו היום אנחנו נעמוד אחר יכולת מאוד מאוד שימושית בבסיס הנתונים של sql server הייתה מאוד שימושית בגרסה של 2008 r2 והשתדרגה משמעותית בגרסה של 2012 לכדי יצירת אובייקט חדש הנקרא sequence כפי שאנחנו נראה בשיעורים לאחר מכן.
היום הנושא שלנו הוא עיסוק בסוגיה שנקראת identity. אידנטיטי זוהי עמודה פר טבלה בגין כל טבלה אני יכול לצייר עמודה אחת בלבד שהיא תהיה מסוג האידנטיטי.
מה אני אומר על האידנטיטי? אני אומר שהשליטה על הנתונים בגין עמודה הזאת אינם ניתנים למשתמש, לא ניתנת לאפליקציה, גם לא המשתמש הכותב סקריפטים של SQL יכול לבצע עדכון או טיוב נתונים בגין עמודה זאת.
עמודה זאת מנוהלת אך ורק בצורה בלעדית על ידי ה-database עצמו. בשיעור שלהלן אנחנו נראה כיצד אנחנו מתייחסים לעמודה הזאת, איך אנחנו שולפים או מעדכנים ממנה מידע, והאם אנחנו יכולים לקחת שליטה מהמחשב, מה-SQL Server, ולשלוט על ערכי העמודה ולבצע הכנסה ישירה
של ערכים לעמודה מסוג Identity. איך אנחנו רואים זאת? כל זאת בשיעור הקרוב. שימו לב לדוגמה הבאה, אנחנו שוב פעם בוחנים את טבלת Employees, בחינה של טבלה כזאת נותנת לנו בעצם את שלל הערכים שיש לנו בתוך הטבלה.
אנחנו פותחים, אנחנו מגלים את הנתונים, יש לנו את עמודות Employee ID, Last Name ו-First Name, כאשר אנחנו יודעים ש-Employee ID, העמודה, Employee ID מצוינת כ-Identity.
קליקים אני על העמודה עצמה, אנחנו נכנסים כאן ל-Designer ומגלים שבשעה שאני עומד על ה-employee ID אני נכנס כאן לטאב של קולום פרופרטיז המאפיינים ואני גולל טיפה ללמטה על מנת לראות מאפיינים נוספים אנחנו מגלים שיש כאן identity specification
תחת התיאור הזה מתחבאות להן שלוש שורות שלושת השורות הללו מציינות שורה ראשונה is identity תשובה בוליינית true or false האם העמודה הזאתי אידנטיטי כן או לא אוקיי במידה והיא אידנטיטי אני נותן למחשב הוראות כיצד צריך לעדכן את העמודה הזאת אידנטיטי אינקרמנט מהו קצב הגדילה
ואידנטיטי סיד מהי נקודת ההתחלה כבר כאן אנחנו מבינים כלל אחד חשוב מאוד בנושא של אידנטיטי עמודות מסוג אידנטיטי חייבות להיות עמודות מסוג דאטה טייפ מספרי בלבד כשאנחנו מסתכלים כאן על העמודה עמודה של Employee ID היא מסוג Data Type של Integer ואשר על כן היא יכולה לקבל ערכים מספריים בלבד ורק עמודה מוגדרת כ-Integer
יכולה להיות מוגדרת כ-Identity Specification True. ניכנס לעמודה נוספת, לעמודת Last Name, כאן ב-Identity Specification כמובן שאנחנו רואים שלא וגם אם אני ארצה לנסות ולשנות את זה ולכתוב כאן yes אני לא מצליח לקבל את האפשרות הזאת, כפי שציינו לפני חצי דקה last name הינה ורקר
הינה מכרוזת ומכרוזת אינה יכולה לשמש כעמודה של אידנטיטי מעבר לכך בגין כל טבלה יש לנו עמודה אחת ויחידה שיכולה להיות אידנטיטי כרגע זו עמודה של אימפלואיז נכנסנו לתוך טבלת אימפלואיז ראינו את המידע בואו נראה איך אני מקבל את אותו מידע ברמה כקוד כלומר טקסטואלית על ידי סקריפט,
אז יש לנו שתי פונקציות לצורך העניין identity seed על מנת לקבל את נקודת ההתחלה של העמודת identity, כלומר שאני צריך לספק לה כאן את שם הטבלה ומכיוון שיש לה רק עמודת identity אחת אני אקבל שורה אחת בלבד.
נפסיק, אנחנו רוצים לראות לא רק את ה-identity seed, בואו נראה גם את ה-identity increment. ה-ident increment נשלח לטבלת employees, סגור סוגריים להריץ, ואנחנו מקבלים שעמודת ה-identity בתוך תולדת employees מתחילה נקודת התחלה ב-1, והקצב הגדילה שלה בכל שורה נוספת הוא 1. אשר על כן,
ברגע שאני אנסה לבצע insert לתוך תולדת employees לעמודת first name, last name, seek, employee ID, שלוש העמודות שאותן אני רוצה כרגע לאכפת, בערכים הבאים: תן להם איזשהו ערכי default, New First Name, Seek New Last Name ו-15 ערך כלשהו לתוך עמודת
Employee ID. אחר שעמודת Employee ID מצוינת לנו כ-Identity, דברי להריץ שאם כזאת אנחנו מקבלים שגיאה ברורה מהמחשב.
cannot insert explicit value for ident color in table employees when, וכאן אנחנו כבר מקבלים את הרמז לבאות When Identity Insert is a set to off. מכאן אני כבר מקבל את הרעיון שאני בעצם יכול לקחת שליטה על העמודה הזאת על ידי זה שאני מדליק את ה-Identity Insert, את המשתנה סביבת. איך אנחנו עושים זאת?
Set Identity Insert של טבלת Employees on. אנחנו מדליקים אותו, ומרגע שאנחנו מדליקים אותו אף שהעמודה הזאת מצוינת כ-Identity, אנחנו לוקחים את השליטה אלינו.
ומכאן את אותה שאילתא כפי שרשמתי מקודם: FirstName, LastName, EmployeeID, Values, NewFirstName, NewLastName, Values, 15. אנחנו רוצים לבצע את ה-insert אותו נכשלנו בביצוע בטרם שהדלקנו את המשתנה סביב ה-Identity Insert.
אנחנו מריצים אותו, אני לחצתי בטעות פעמיים והצלחנו להכניס את השורה 15. בואו נבדוק זאת בבקשה. Select, F5, הנה עובד נוסף, נוסף לנו כרגע לחברה.
זה העובד הזה. U last name, U first name, כאשר הקוד שלו הוא 15. אנחנו רוצים להכניס עובד נוסף, אנחנו רק צריכים לשמור על ערכים חד-חד-ערכיים, מכיוון שעמודת input לא יהיה די עניינה מסוג primary key, כלומר זה מפתח בטבלה, מה שדורש לנו ערכים יוניקים, ערכים חד-חד-ערכיים.
16 אין לי, ואת 16 אנחנו יכולים להכניס, ואני מריט את זה ומקבל F5 על מנת לראות את הפלט, והנה, עובד מספר 16 נכנס אחר כבוד לתוך הדאטאבייס שלנו.
ראינו כאן דבר מדהים, אף שהגדרתי עמודה, נגביר את המסך, אף שהגדרתי עמודה שהיא מסוג אידנטיטי, יש