KB4054398 - תיקון: "השוואה לא חוקית עקב קמעונאות NO COLLATION" מתרחשת ב- SQL Server 2014, 2016 ו- 2017

חל על
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2017 Standard on Windows SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

סימפטומים

נניח שיש לך שאילתה שמבצעת פעולות מחרוזת מסוימות, לדוגמה, שרשור, בעמודות CHAR או VARCHAR ב- Microsoft SQL Server 2014, 2016 ו- 2017. בחן את התרחיש הבא:

  • שרשור עמודות עם איסוףים שונים שהוקצו להם.
  • איסוףים אלה אינם תואמים זה עם זה. לדוגמה, אתה מנסה לשרשר עמודה האיסוף כעמודה Latin1_General_CI_AI עם Latin1_General_BIN.
  • התוצאה הסופית של שרשור מוקצית לאיסוף ספציפי (כולל "database_default") כפתרון ההתנגשות.

בתרחיש זה, SQL Server להחזיר קמעונאות המציינת "השוואה לא חוקית עקב NO COLLATION", ואתה עשוי לקבל הודעות שגיאה מסוימות הדומה להודעה הבאה:

הערה

  • מיקום: typinfo.cpp:LineNumber
    ביטוי: False
    SPID: SPID
    מזהה תהליך: ProcessID
    תיאור: השוואה לא חוקית עקב אין איסוף.

  • Msg 3624, רמה 20, מצב 1, מספר שורה
    בדיקת קביעת מערכת נכשלה. עיין ביומן SQL Server השגיאות לקבלת פרטים. בדרך כלל, כשל קביעה נגרם על-ידי באג תוכנה או השחתת נתונים. כדי לבדוק אם מסד הנתונים פגום, שקול להפעיל את DBCC CHECKDB. אם הסכמת לשלוח קבצי Dump ל- Microsoft במהלך ההתקנה, קובץ Dump מצומצם יישלח אל Microsoft. ייתכן שעדכון יהיה זמין מ- Microsoft ב- Service Pack העדכני ביותר או בתיקון חם מהתמיכה הטכנית.

  • Msg 596, רמה 21, מצב 1, מספר שורה
    אין אפשרות להמשיך בביצוע מאחר שההפעלה נמצאת במצב kill.

  • Msg 0, Level 20, State 0, LineNumber

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

גורם

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

פתרון

בעיה זו נפתרה בעדכונים המצטברים הבאים עבור SQL Server:

עדכון מצטבר 8 עבור SQL Server 2016 SP1

עדכון מצטבר 4 עבור SQL Server 2017

עדכון מצטבר 9 עבור SQL Server 2014 SP2

אודות עדכונים מצטברים עבור SQL Server:

כל עדכון מצטבר חדש עבור SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. עיין בעדכונים המצטברים האחרונים עבור SQL Server:

העדכון המצטבר האחרון עבור SQL Server 2016

העדכון המצטבר האחרון עבור SQL Server 2017

העדכון המצטבר האחרון עבור SQL Server 2014

מצב

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

חומרי עזר

קבל מידע על המינוח שבו משתמשת Microsoft כדי לתאר עדכוני תוכנה.