תיקון: שאילתה המשתמשת בפונקציה DATEDIFF עשוי לפעול לאט ב- SQL Server 2005 או ב- SQL Server 2008 או ב- SQL Server 2008 R2

חל על: SQL Server 2008 R2Microsoft SQL Server 2005SQL Server 2008 Service Pack 2

Microsoft SQL Server 2005 פיזור של Microsoft או Microsoft SQL Server 2008 או SQL 2008 R2 מתקן להורדה כקובץ אחד. מאחר התיקונים הם מצטברים, כל פרסום חדש כולל את כל התיקונים החמים ואת כל האבטחה מתקן אשר היו כלולים עם הקודם Microsoft SQL Server 2005 או Microsoft SQL Server 2008 או של תיקון SQL 2008 R2

תופעות


הנח כי תפעיל שאילתה על מופע של Microsoft SQL Server 2005 או Microsoft SQL Server 2008 או Microsoft SQL Server 2008 R2 אשר עונה על התנאים הבאים:
  • השאילתה מכילה אופרטור יחסי. לדוגמה, קטן מ- (<) אופרטור.
  • אין בפונקציה DATEDIFF האופרנד של אופרטור יחסי.
במצב זה, שרת SQL לבחור תוכנית שאילתה מסינכרון כדי להפעיל שאילתה זו. לכן, השאילתה עשויה לפעול באיטיות.

סיבה


בעיה זו מתרחשת מאחר ממטב SQL Server underestimates את מספר השורות שיוחזרו בעת שימוש בפונקציה DATEDIFF .

פתרון


מידע עדכון מצטבר

SQL Server 2005 Service Pack 3

התיקון עבור בעיה זו פורסם לראשונה ב- 15 עדכון מצטבר עבור SQL Server 2005 Service Pack 3. לקבלת מידע נוסף אודות חבילת עדכון מצטבר זה, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2507766 חבילת עדכון מצטבר 15 עבור SQL Server 2005 Service Pack 3
הערה מאחר גירסאות build הם מצטברים, כל פרסום תיקון חדש כולל את כל התיקונים החמים ולתקן כל תיקוני האבטחה שהיו כלולים בפרסום הקודם SQL Server 2005 מהדורה. Microsoft ממליצה כי תשקול את החלת העדכניים ביותר פרסום התיקון החם הזה. לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
960598 SQL Server 2005 בונה שפורסמו לאחר SQL Server 2005 Service Pack 3 פורסם
תיקונים חמים של Microsoft SQL Server 2005 נוצרות עבור ערכות שירות הספציפי של שרת SQL. עליך להחיל תיקון חם SQL Server 2005 Service Pack 3 על התקנה של SQL Server 2005 Service Pack 3. כברירת מחדל, כל תיקון חם הכלול ב- SQL Server service pack נכלל ב- SQL Server service pack הבא.

SQL Server 2005 Service Pack 4

התיקון עבור בעיה זו פורסם לראשונה ב- 2 עדכון מצטבר עבור SQL Server 2005 Service Pack 4. לקבלת מידע נוסף אודות חבילת עדכון מצטבר זה, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2489409 חבילת העדכון המצטבר 2 עבור SQL Server 2005 Service Pack 4
הערה מאחר גירסאות build הם מצטברים, כל פרסום תיקון חדש כולל את כל התיקונים החמים ולתקן כל תיקוני האבטחה שהיו כלולים בפרסום הקודם SQL Server 2005 מהדורה. Microsoft ממליצה כי תשקול את החלת העדכניים ביותר פרסום התיקון החם הזה. לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2485757 SQL Server 2005 בונה שפורסמו לאחר SQL Server 2005 Service Pack 4 פורסם
תיקונים חמים של Microsoft SQL Server 2005 נוצרות עבור ערכות שירות הספציפי של שרת SQL. עליך להחיל תיקון חם SQL Server 2005 Service Pack 4 להתקנה של SQL Server 2005 Service Pack 4. כברירת מחדל, כל תיקון חם הכלול ב- SQL Server service pack נכלל ב- SQL Server service pack הבא.

SQL Server 2008 ה-Service Pack 1

התיקון עבור בעיה זו פורסם לראשונה ב- 13 עדכון מצטבר עבור SQL Server 2008 Service Pack 1. לקבלת מידע נוסף אודות חבילת עדכון מצטבר זה, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2497673 חבילת העדכון המצטבר 13 עבור SQL Server 2008 Service Pack 1
הערה מאחר גירסאות build הם מצטברים, כל פרסום תיקון חדש כולל את כל התיקונים החמים ולתקן כל תיקוני האבטחה שהיו כלולים בפרסום הקודם SQL Server 2008 מהדורה. Microsoft ממליצה כי תשקול את החלת העדכניים ביותר פרסום התיקון החם הזה. לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
970365 SQL Server 2008 בונה שפורסמו לאחר SQL Server 2008 Service Pack 1 פורסם
תיקונים חמים של Microsoft SQL Server 2008 נוצרות עבור ערכות שירות הספציפי של שרת SQL. עליך להחיל תיקון חם SQL Server 2008 Service Pack 1 להתקנה של SQL Server 2008 Service Pack 1. כברירת מחדל, כל תיקון חם הכלול ב- SQL Server service pack נכלל ב- SQL Server service pack הבא.

SQL Server 2008 ה-Service Pack 2

התיקון עבור בעיה זו פורסם לראשונה ב- 3 עדכון מצטבר עבור SQL Server 2008 Service Pack 2. לקבלת מידע נוסף אודות חבילת עדכון מצטבר זה, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2498535 חבילת העדכון המצטבר 3 עבור SQL Server 2008 Service Pack 2
הערה מאחר גירסאות build הם מצטברים, כל פרסום תיקון חדש כולל את כל התיקונים החמים ולתקן כל תיקוני האבטחה שהיו כלולים בפרסום הקודם SQL Server 2008 מהדורה. Microsoft ממליצה כי תשקול את החלת העדכניים ביותר פרסום התיקון החם הזה. לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2402659 SQL Server 2008 בונה שפורסמו לאחר פורסם SQL Server 2008 Service Pack 2
תיקונים חמים של Microsoft SQL Server 2008 נוצרות עבור ערכות שירות הספציפי של שרת SQL. עליך להחיל תיקון חם SQL Server 2008 Service Pack 2 להתקנה של SQL Server 2008 Service Pack 2. כברירת מחדל, כל תיקון חם הכלול ב- SQL Server service pack נכלל ב- SQL Server service pack הבא.

SQL Server 2008 R2 Service Pack 1

התיקון עבור בעיה זו פורסם לראשונה ב- 1 עדכון מצטבר עבור SQL Server 2008 R2 Service Pack 1. לקבלת מידע נוסף אודות האופן שבו ניתן להשיג את חבילת עדכון מצטבר זה, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2544793 חבילת העדכון המצטבר 1 עבור SQL Server 2008 R2 Service Pack 1
הערה מאחר גירסאות build הם מצטברים, כל פרסום תיקון חדש כולל את כל התיקונים החמים ולתקן כל תיקוני האבטחה שהיו כלולים בפרסום הקודם SQL Server 2008 R2 מהדורה. אנו ממליצים לך לשקול החלת העדכניים ביותר פרסום התיקון החם הזה. לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2567616 SQL Server 2008 R2 בונה שפורסמו לאחר SQL Server 2008 R2 Service Pack 1 פורסם

SQL Server 2008 R2

התיקון עבור בעיה זו פורסם לראשונה ב- 7 עדכון מצטבר. לקבלת מידע נוסף אודות האופן שבו ניתן להשיג את חבילת עדכון מצטבר זה עבור SQL Server 2008 R2, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2507770 חבילת העדכון המצטבר 7 עבור SQL Server 2008 R2
הערה מאחר גירסאות build הם מצטברים, כל פרסום תיקון חדש כולל את כל התיקונים החמים ולתקן כל תיקוני האבטחה שהיו כלולים בפרסום הקודם SQL Server 2008 R2 מהדורה. אנו ממליצים לך לשקול החלת העדכניים ביותר פרסום התיקון החם הזה. לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
981356 SQL Server 2008 R2 בונה שפורסמו לאחר פורסם SQL Server 2008 R2

מצב


Microsoft אישרה כי מדובר בבעיה במוצרי Microsoft הרשומים במקטע 'חל על'.

פתרון


כדי לעקוף בעיה זו, כתוב מחדש את השאילתה כך תוכנית שאילתה לא להשתמש בפונקציה DATEDIFF פרדיקאטים. לדוגמה, להלן עשוי לפעול לאט:
create procedure proc_test @date datetimeasselect COUNT (*) from t where c1 <DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0)  
עם זאת, באפשרותך לכתוב מחדש את השאילתה כ הבאות כדי לעקוף את הבעיה:
create procedure proc_test2 @date datetimeasdeclare @datestr nvarchar(50), @sqlstr nvarchar(1024)set @datestr = CAST (DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0)  as nvarchar(50))set @sqlstr ='select COUNT (*) from t where c1 < ''' + @datestr + ''''exec (@sqlstr) 

הפניות


לקבלת מידע נוסף אודות מודל מצטבר של מתן שירות עבור SQL Server, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
935897 מודל מתן שירות מצטבר זמין מתוך צוות SQL Server כדי לספק תיקונים חמים עבור בעיות שדווחו
לקבלת מידע נוסף אודות הסכימה למתן שמות עבור עדכונים של SQL Server, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
822499 סכימה חדשה למתן שמות עבור חבילות עדכוני תוכנה של Microsoft SQL Server
לקבלת מידע נוסף על מינוח עדכוני התכנה, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
824684 תיאור המינוח הרגיל המשמש לתיאור עדכוני התוכנה של Microsoft