פתרון בעית Cannot resolve collation conflict

באחת השרתים שאני משכיר, התגלה, *אחרי* שהיה עליו כבר דטאטבייס פעיל, שצריך לשנות את ה-collation .
ביקשתי מהאדמין ועשו זאת, שינו לעברית.
אבל זה תקף רק מכאן – ואילך.
וכאן זה יצר לי בעיה כזו.
כאשר אני בא לעשות שאילתות מסוימות שמשלבות נתונים מ-2 סוגי collation שונים (או יותר)
אז ה-Sql server נותן הודעת שגיאה כזו

Cannot resolve collation conflict between "Hebrew_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in UNION ALL operator occurring in SELECT statement column 2.

אז הפתרון הוא כזה, אחרי שדות טקסט בשאילתא, צריך להוסיף את הביטוי הבא

COLLATE DATABASE_DEFAULT

ואז השאילתא לדוגמא נראית כך :

SELECT tblDepts.DeptID , tblDepts.DeptName COLLATE DATABASE_DEFAULT, 
       tblWorkers.WorkerName COLLATE DATABASE_DEFAULT, 'מחלקה' as sinun  
FROM tblDepts  LEFT JOIN tblWorkers ON tblDepts.manager = tblWorkers.WorkerIDnumber

union all 
SELECT  [supplier_id] ,[supplier_name] COLLATE DATABASE_DEFAULT
        ,'-' as man ,'קבלן' as sinun
  FROM [tbl_suppliers]

מידע נוסף : http://blog.sqlauthority.com/2007/06/11/sql-server-cannot-resolve-collation-conflict-for-equal-to-operation/

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *