חל על
SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2012 Business Intelligence SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2012 Enterprise Core

Microsoft מפיצה את Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) כקובץ הניתן להורדה. מאחר שהתיקונים מצטברים, כל מהדורה חדשה מכילה את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו במהדורת התיקון הקודמת של SQL Server 2008 R2 Service Pack 1 (SP1).

תופעות

שקול את התרחיש הבא:

  • יש לך עמודת סוג נתונים של datetimeoffset בטבלה ב-Microsoft sql Server 2008 R2 או ב-Microsoft sql server 2012.

  • אתה יוצר אינדקס בעמודה datetimeoffset .

  • אתה ממיר את סוג הנתונים datetimeoffset לסוג נתונים של smalldatetime באמצעות הפונקציה CAST או convert ללא הארגומנט סגנון , או כאשר הערך של ארגומנט הסגנון הוא 0.

  • התוצאה של הפונקציה CAST או CONVERT נמצאת בשימוש במסנן בשאילתת Transact-SQL.

  • אתה מפעיל את שאילתת ה-Transact-SQL.

בתרחיש זה, התוצאה המוחזרת על-ידי השאילתה שגויה מכיוון שהמסנן אינו פועל כהלכה. לדוגמה, נניח שהעמודה datetimeoffset בשם "Date" מכילה את הערכים הבאים:

  • 2011-05-21 23:00:00 -01:00

  • 2011-05-21 23:00:00 +00:00

  • 2011-05-21 23:00:00 +01:00

אתה מפעיל את השאילתה הבאה:

SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'

תוצאת השאילתה מחזירה שורה אחת בלבד. עם זאת, התוצאה הצפויה צריכה להחזיר שורות עבור כל שלושת הערכים.

פתרון

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

SQL Server 2012

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

2723749 חבילת עדכון מצטבר 3 עבור SQL Server 2012הערה מאחר שבונה הגירסאות מצטבר, כל מהדורת תיקון חדשה מכילה את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו במהדורת התיקון הקודמת של SQL Server 2012. Microsoft ממליצה לשקול להחיל את מהדורת התיקון העדכנית ביותר המכילה תיקון חם זה. לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר ב-Microsoft Knowledge Base:

2692828 SQL Server 2012 בונה שהופצו לאחר ש-SQL Server 2012 הופץ עליך להחיל תיקון חם של SQL Server 2012 על התקנה של SQL Server 2012.

SQL Server 2008 R2 Service Pack 2

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

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

2730301 SQL Server 2008 R2 בונה שהופצו לאחר ש-SQL Server 2008 R2 Service Pack 2 הופץ

SQL Server 2008 R2 SP1

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

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

2567616 בונה SQL Server 2008 R2 שהופצו לאחר ש-SQL Server 2008 R2 SP1 הופץ

מידע נוסף

כדי לשחזר את הבעיה, בצע את הפעולות הבאות:

  1. הפעלת השאילתה הבאה כדי ליצור טבלה עם עמודת datetimeoffset ולהוסיף כמה רשומות:CREATE TABLE #TestTimeZones (dto datetimeoffset(0)); GO INSERT INTO #TestTimeZones(dto) VALUES ('2011-05-21 23:00:00 -01:00'), ('2011-05-21 23:00:00 +00:00'), ('2011-05-21 23:00:00 +01:00'); GO

  2. הפעלת השאילתה הבאה, ובאפשרותך לראות שכל שלושת הערכים מפורטים כראוי בתוצאה המוחזרת:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;

  3. הפעל את השאילתה הבאה כדי ליצור אינדקס בעמודה "dto" וכדי לחזור על אותה שאילתה:CREATE INDEX IX_testTimeZones_Dto ON #TestTimeZones(dto); GO -- Repeat the same query DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withIndex FROM #TestTimeZones WHERE CAST(dto A smalldatetime)=@t; GO

  4. הפעלת השאילתה בשלב 2 שוב. הפעם, השאילתה מחזירה שורה אחת בלבד.

  5. הפעלת השאילתה הבאה כדי למחוק את האינדקס ואת הטבלה שיצרת:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO

הפניות

לקבלת מידע נוסף אודות הפונקציות CAST ו-CONVERT, עבור אל אתר האינטרנט הבא של MSDN:

מידע כללי אודות הפונקציות CAST ו-CONVERT ב-SQL Server

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המופיעים בסעיף "חל על".

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

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

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