תאר אצוות
אצוות T-SQL הן אוספים של משפט T-SQL אחד או יותר שנשלחים ל- SQL Server על-ידי לקוח כיחידת יחיד. SQL Server פועל על כל המשפטים באצווה בו-זמנית בעת ניתוח, מיטוב וביצוע של הקוד.
אם אתה כותב דוחות שבדרך כלל כותב שאילתות באמצעות פקודות ולא פרוצדורות SELECT , עדיין חשוב להבין גבולות באצוות. גבולות אלו משפיעים על העבודה שלך עם משתנים ופרמטרים בפרוצדורות המאוחסנות ובשגרות אחרות. לדוגמה, יש להצהיר על משתנה באותה אצווה שבה מתבצעת הפניה. לכן חשוב לזהות מה כלול באצווה.
אצוות מופרדות על-ידי יישום הלקוח. האופן שבו אתה מסמן את סוף האצווה תלוי בהגדרות הלקוח שלך. עבור לקוחות מיקרוסופט, כולל SQL Server Management Studio (SSMS) ו-SQLCMD, מילת המפתח היא GO.
בדוגמה זו, יש שתי קבוצות נפרדות שכל אחת מהן מסתיימת במשפט:GO
CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO
GO של מסיים האצווה אינו מילת מפתח של T-SQL, אך הוא מילת מפתח המזוהה על-ידי SSMS כדי לציין את סוף האצווה.
שים לב לשני שיקולים חשובים כשאתה עובד עם קבוצות T-SQL:
- באצוות הן גבולות לטווח המשתנים, כלומר משתנה שהוגדר באצווה אחת יכול להיות מופנה רק על ידי קוד אחר באותה אצווה
- חלק מההצהרות, בדרך כלל משפטי הגדרת נתונים כמו
CREATE VIEW,CREATE FUNCTION,CREATE PROCEDUREואי אפשר לשלב עם אחרות באותה אצווה.
עבודה עם אצוות
אצווה היא אוסף של משפטי T-SQL שנשלחו ל- SQL Server לפתרון מבנה טקסט וביצוע. הבנת אופן הניתוח של האצוות מועילה לזיהוי הודעות שגיאה והתנהגות. כאשר אצווה נשלחת על-ידי לקוח, כגון בעת לחיצה על לחצן Execute ב- SSMS, האצווה מנתחת עבור שגיאות תחביר על-ידי מנגנון SQL Server. כל שגיאה שמתגלה גורמת לכל האצווה להידחה; אין ביצוע חלקי של הצהרות בתוך האצ'.
אם האצווה מעבירה את בדיקת התחביר, SQL Server מפעיל שלבים אחרים, פותר שמות אובייקטים, בודק הרשאות ומטב את הקוד לביצוע. לאחר השלמת תהליך זה והביצוע מתחיל, המשפטים מצליחים או נכשלים בנפרד. זוהי ניגודיות חשובה לבדיקת תחביר. כאשר מתרחשת שגיאת ריצה בשורה אחת, השורה הבאה עדיין יכולה לפעול, אלא אם מוסיפים טיפול בשגיאות לקוד.
לדוגמה, האצווה הבאה מכילה שגיאת תחביר:
INSERT INTO dbo.t1 VALUE(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
הוא מציג הודעת שגיאה זו:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'VALUE'.
השגיאה אירעה בשורה 1, אך האצווה כולה נדחית, והביצוע אינו ממשיך בשורה 2. גם אם כל אחת מההצהרות INSERT הייתה הפוכה ושגיאת התחביר הייתה בשורה השנייה, הקו הקדמי לא היה מתבצע כי כל האצווה הייתה נדחתה.
לעומת זאת, האצווה המתוקנת הזו אינה מכילה שגיאה:
INSERT INTO dbo.t1 VALUES(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
הדגימות הקודמות משתמשות INSERT בהצהרות במקום SELECT כי הצהרות שינוי מקובצות בדרך כלל בקבוצות.