
USE Northwind בתחילת הקובץ, למקרה שהמשתמש שכח לבחור את הדאטאבייס.DECLARE מסוג nvarchar(40), שמתאים לעמודת שם החברה בטבלת Customers. האזור הזה הוא היחיד שהמשתמש צריך למלא.SCOPE_IDENTITY() נותן את מספר ההזמנה החדשה. ההרצאה ממליצה עליו על פני @@IDENTITY, כי הוא מושפע פחות מטריגרים.הטקסט המלא של הדקות הראשונות בהרצאה «כתיבת SCRIPT ב-SQL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם בהרצאה הזאת אנחנו נכתוב סקריפט מיני תוכנה קטנה כזאת שיודעת לקבל הזמנות חדשות עבור דאטאבייס של נורטווינד. התוכנה הקטנה שלנו צריכה לקבל מבחוץ שם של לקוח שהזמין את המוצר ורשימת מוצרים והכמויות שהוא רוצה.
שימו לב זה יכול לקבל הרבה מוצרים לא רק מוצר אחד. אז בואו נתחיל לעשות את זה. דבר ראשון אנחנו עושים use Northwind למקרה שיפתחו את הקובץ שלי.
וישכחו פה להעביר לדאטה בייס נורטווינד. אם מישהו שוכח לא נורא כי יש את הפקודה use שתעביר לבד. שימו לב נניח מישהו שם את זה על מאסטר אנחנו עושים use northwind וזה פה מתחלף לנורטווינד.
אז זה למקרה שמישהו ישכח להעביר נשים use northwind. הלאה אנחנו רוצים שם של לקוח אנחנו צריכים משתנה עזר שיהיה לו שם של לקוח אז אנחנו נכריז על משתנה עזר declare מכריזים על שם משתנה ונקרא לו נניח customer name.
משתנה עזר מסוג שם של לקוח איפה השמות של הלקוחות בטבלת customers והשם שלהם נקרא company name nvarchar 40 יופי זה השמות של הלקוחות nvarchar 40 אז אני עושה פה משתנה עזר מסוג nvarchar 40 ונכניס לזה ערך בואו נבחר איזשהו לקוח נניח לקוח בשם סימונס ביסטרו שזה יהיה השם שלו אז אני עושה את זה כדוגמה שימו לב לכאן
יכניסו המשתמשים את הערכים שהם רוצים לעבוד איתם, אני נותן דוגמא על השדה הזה. אז האזור הזה אני מגדר אותו כדי שהיוזרים יוכלו להכניס פה את הערכים שלהם.
כשהם ירצו, הם יודעים שהאזור הזה, לפה הם מכניסים את הערכים. ופה תהיה התוכנה שלי. תכף אתם תראו את כל זה קורה. מה עוד אני צריך?
אני צריך משתנה עזר שיכיל לי את המוצרים ואת הכמויות. אז בוא נכריז על משתנה עזר, נקרא לו New Products. שימו לב, משתנים ב-SQL מסומנים עם שטרודל אז אבל אני רוצה לא אחד אני רוצה כמה אז אני מכריז על טבלה יש לי משתנה שבתוך המשתנה הזה יושבת טבלה ובטבלה הזאת נשים שתי עמודות עמודה product
name שזה שם המוצר שהם מביאים לנו שזה nvarchar 40 כמו שבונים טבלה רגילה גם בונים משתנה מסוג טבלה באותה צורה וגם אנחנו רוצים quantity מסוג integer כמות כמה הם רוצים להזמין אז יש לי פה משתנה עזר מסוג טבלה, בוא נמלא אותו, נעשה אינסרט כמו לטבלה רגילה, אז אני עושה אינסרט לתוך הטבלה ומכניס לפה values,
נניח שאנחנו נעשה דוגמא עם chai, 20 יחידות, ויהיה לנו פה עוד איזשהו מוצר שמזמינים, נניח שזה יהיה טופו, 10 יחידות. אז מה שעשינו זה עכשיו נתונים לדוגמה באזור הזה, במציאות היוזרים המשתמשים יכניסו את הנתונים שלהם ואז יהיה לי סקריפט מוכן בדיסק שכשאני רוצה להכניס הזמנה חדשה אני רק לכאן מכניס את השם ולכאן את המוצרים ואת הכמויות.
במציאות אתם יכולים לשלוח את זה למתכנת שהוא יעשה את זה כחלק מאתר האינטרנט לדוגמה. אוקיי אז יש לנו שם של לקוח ויש לנו את המוצרים שזה פה שם של לקוח והמוצרים עכשיו נשאר לנו רק להכניס הכל לתוך טבלת order details.
נכניס את כל המוצרים ואת כל ההזמנה לטבלת Order Details. בואו ננסה לעשות Insert ל-Order Details. אנחנו עושים Insert. פה זה כבר האזור הטכני שלי.
Insert, ואני גורר לפה את ה-Order Details. שימו לב, הרעיון של ההפרדה שמי שיבוא ויפתח את הסקריפט לא יצטרך לחשוב הכל מההתחלה, יכניס פה רק את הערכים שהוא רוצה וזהו. Insert של Order Details, ואיזה עמודות יש לנו?
יש לנו עמודת Order ID שצריך לתת לו, יש לו עמודה של Product ID שצריך לתת לו, את ה-Unit Price ו-Quantity והנחה, שההנחה תהיה 0. עכשיו בואו נחשוב מאיפה אנחנו מביאים את העמודות האלו.
מאיפה אנחנו מביאים את ה-Order ID, את ה-Product ID? עקרונית הייתי רוצה לעשות דבר כזה, Insert עם Select מתוך משתנה New Product.
Select From New Product. אבל ב-New Product אין לי Order ID, אין לי גם פרודקט ID. בניו פרודקט יש לי רק את השם ואת הכמות. אז את ה-Quantity אני יכול לתת, אבל מאיפה אני מביא את ה-Order ID?
כדי שיהיה לי Order ID אני צריך לפני כן פה למעלה מעליו להכניס שורה חדשה לתוך טבלת Orders הזמנות. אם אני אכניס שורה חדשה לטבלת Orders יהיה לי Order ID. בטבלת Orders אני צריך להזין הזמנה חדשה ולקבל את ה-Order ID. קודם כל, לפני שמתחילים עם כל הסיפור הזה של ה-insert כאן,
נתחיל עם ההזנה לתוך טבלת orders. אז אנחנו הולכים להזין מה? את המספר של הלקוח, ונניח את התאריך. רק את המספר של הלקוח ותאריך. עכשיו, נשאלת השאלה מאיפה אני אקח את המספר של הלקוח, הרי יש לי רק את השם.
אז אני עושה פה Select* From customers where company name שווה למה? למשתנה הזה. כדי לבדוק, לפני שאני עושה את המשתנה, שיהיה לי קל לבדוק.
בואו נראה שזה עובד. כן, זה עובד לי. הנה, השאילתה הזאת בחרה לי רק את ה-Simons Bistro הזה, שזה ה-Customer ID שלו.
אז אני פה במקום השם מכניס את ה-Customer, את המשתנה. עכשיו, כשיש לי את המשתנה לא צריך ללכת בכל הסקריפט ולחפש איפה עוד מופיע ה-Simons Bistro הזה.
יכול להיות שזה סקריפט טהור. בגלל זה אני עושה משתנה בהתחלה, נותן לו איזשהו שם ואז היוזר שמגיע פעם ראשונה לראות את התוכנית שלי מכניס רק פה את הערכים וזהו בכל מה שקורה פה בפנוכו הוא יכול לא לגעת זה עובד אוטומטית ואני בוחר מתוך הדבר הזה רק את העמודה customer ID יופי אז יש לי customer ID שזה בעצם העמודה הזאת של ה-select
ו-order date שזה ה-get date של עכשיו הפונקציה שמחזירה לי את התאריך של עכשיו מה שזה יעשה לי זה יכניס לי לטבלת orders שתי עמודות כאשר אורדר דייט נכנס מהפונקציה ו-Customer ID נכנס מתוך הסלקט הזה.
בואו נעשה לזה בדיקה, נעשה לזה בדיקה ונראה שזה באמת עובד. תראו, הסלקט הזה נותן לי בסוף Customer ID והעמודה של התאריך של עכשיו, וזה הולך להיכנס ל-Customer ID ו-Order Date.
בואו נראה שזה באמת עובד כל מה שעשינו. ננצל פה Output, פקודת Output, רק שידפיס לי את זה על המסך, את כל מה ש-inserted, inserted נקודה כוכבית.
כל מה שהוא הולך להכניס שידפיס לי במסך, עכשיו אני לא באמת רוצה את ההכנסה הזאת, אז כדי לא לבצע את זה על אמת, אני אעשה פה בגין טרנזקציה, אוקיי, אני מתחיל טרנזקציה ועושה לזה למטה פה rollback, כדי שהוא לא באמת יכניס לי ערכים לתוך הטבלת ה-orders, אני רוצה רק לעשות בדיקה, עכשיו בואו נעשה בדיקה,
ואנחנו מקבלים output שלטבלת ה-orders נכנסה הזמנה חדשה 11,083, בוא נריץ את זה עוד פעם נכנסה עכשיו הזמנה 11,084 ושימו לב זה לא באמת נכנס יש רולבק אבל עדיין הדנטיטי מתקדם קדימה גם עם הרולבק אז ככה נוצרים חורים בעמודת הדנטיטי האוטומטית אז אנחנו מקבלים עכשיו אינסרט לתוך טבלת אורדרס יפה מאוד שזה בדיוק מה
שרציתי הרי המטרה שלנו זה לקחת את האורדר איידי הזה שהכנסנו אותו עכשיו ולהכניס אותו פה באורדר דיטלס הרי אנחנו צריכים נכניס את כל המוצרים ל-Order Details.
אז איך אני עושה את זה? אני צריך לקחת את 11,084. מה זה 11,084? זה ה-inserted האחרון, זה ה-ID האחרון. אז אני יכול להשתמש בפונקציה שטרודל שטרודל אדנטיטי ומחזירה לי את ה-ID האחרון, אבל מה