דלג לתוכן הראשי
היכנס דרך Microsoft
היכנס או צור חשבון.
שלום,
בחר חשבון אחר.
יש לך חשבונות מרובים
בחר את החשבון שברצונך להיכנס באמצעותו.

תופעות

במחשב שבו פועל Microsoft SQL Server 2008, שקול את התרחישים הבאים.

תרחיש 1

אתה מציין ביטוי טבלה נפוץ (CTE) באמצעות המשפט WITH. לדוגמה, אתה מפעיל את השאילתה הבאה.

WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)

לאחר מכן, הפעלת שאילתה זו.

SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1

בתרחיש זה, תוכנית השאילתה המאוחסן במטמון עבור שאילתה זו מאחסנת ערכים שגויים statement_start_offset וstatement_end_offset. באופן ספציפי, אתה מבחין שהערך statement_end_offset קטן מהערך הstatement_start_offset בעת ההפעלה sys.dm_exec_query_stats תצוגת ניהול דינאמי (רישוי). עקב בעיה זו, דוח ביצועים עשוי להיכשל כאשר הדוח מניח שהערך הstatement_start_offset תמיד קטן יותר מהערך של הstatement_stop_offset.

תרחיש 2

אתה מציין ביטוי טבלה משותף באמצעות המשפט WITH, ואתה משתמש באפשרות הידור מחודש. לדוגמה, עליך ליצור פונקציה ב-SQL Server 2008 באמצעות הסקריפט הבא.

CREATE FUNCTION function1() RETURNS int ASBEGINDECLARE @x intSET @x=1;WITH common_table_expression AS (SELECT @x AS column1) (SELECT @x=column1 FROM common_table_expression) OPTION(RECOMPILE)RETURN @xEND

בעת הפעלת השאילתה "select dbo. function1 ()", אתה מקבל את הודעת השגיאה הבאה:

אירעה שגיאה חמורה בפקודה הנוכחית. יש להשליך את התוצאות, אם קיימות.

בנוסף, שגיאה זו עשויה להתרחש ללא אפשרות הידור משוב אם שרת SQL נתקל בתעבורת שרת כבדה.

תרחיש 3

עליך לציין ביטוי טבלה משותף באמצעות המשפט WITH. במשפט WITH, עליך לציין טבלה שאינה קיימת. לדוגמה, אתה מפעיל את השאילתה הבאה.

WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO

בעת הפעלת שאילתה זו, לא מתקבלת שגיאה עבור הטבלה החסרה.

סיבה

בעיות אלה מתרחשות עקב עיבוד לא תקין של משפט SELECT העוקב אחר משפט a. המשפט WITH משתמש בתחביר הבא.

WITH common_table_expression AS(CTE_query_definition)

משפט זה יוצר ערכת תוצאות המוקצית לביטוי הנפוץ של הטבלה שצוינה. לאחר מכן, עליך לבצע הצהרה זו באמצעות משפט SELECT. אם המשפט השני מוקף בסוגריים, ולאחר מכן אתה מנסה לבצע פעולה בתוצאות או שאתה מנסה להפעיל תצוגת ניהול דינאמית sys.dm_exec_query_stats, אתה מקבל תוצאות שגויות או שגיאה.

פתרון

מידע אודות service pack כדי לפתור בעיה זו, השג את ה-service pack העדכני ביותר עבור SQL Server 2008. לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר ב-Microsoft Knowledge Base:

968382 כיצד להשיג את ערכת השירות העדכנית ביותר עבור SQL Server 2008

פתרון

כדי לעקוף בעיות אלה, עליך להסיר את הסוגריים מתוך המשפט העוקב אחר ביטוי הטבלה המשותפת. לדוגמה, שקול את הפרטים הבאים במשפט המשתמש בסוגריים כגון.

WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)

כדי לעקוף בעיות אלה, בצע את הפעולות הבאות במשפט שאינו משתמש בסוגריים אלה.

WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המופיעים בסעיף "חל על". בעיה זו תוקנה לראשונה ב-SQL Server 2008 Service Pack 2 (SP2).

מידע נוסף

לקבלת מידע נוסף אודות אופן השימוש במשפט WITH עם ביטוי טבלה נפוץ, בקר בדף האינטרנט הבא של MSDN:

באמצעות common_table_expression (Transact-SQL)לקבלת מידע נוסף אודות sys.dm_exec_query_stats, בקר בדף האינטרנט הבא של MSDN:

sys.dm_exec_query_stats (Transact-SQL)

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.

קהילות עוזרות לך לשאול שאלות ולהשיב עליהן, לתת משוב ולשמוע ממומחים בעלי ידע עשיר.

האם מידע זה היה שימושי?

עד כמה אתם מרוצים מאיכות השפה?
מה השפיע על החוויה שלך?
בלחיצה על 'שלח', אתה מאפשר למשוב שלך לשפר מוצרים ושירותים של Microsoft. מנהל ה-IT שלך יוכל לאסוף נתונים אלה. הצהרת הפרטיות.

תודה על המשוב!

×