פקודת VIEW ב sql

tsipibir

New member
פקודת VIEW ב sql

אני מעונינת ליצור view ל 2 טבלאות שכל אחת מהן נמצאת במסד נתונים שונה. הפקודה שרשמתי: alter view aa as (select 2 as code,jv_shemMishpaha as name, v_mail as mail, ' ' as in_list from ahuza.dbo_OVDIM) union (select 1 as code,CH_SOCHER_NAME as name,CH_mail as mail,' ' as in_list from dbo.MHOZEH) התוצאה שקבלתי: Server: Msg 446, Level 16, State 9, Procedure aa, Line 2 Cannot resolve collation conflict for UNION operation. מישהו יכול לעזור לי???
 
הסבר + אפשרות לפתרון

לפי הודעת השגיאה לפחות בחלק מהעמודות יש collation שונה. collation מגדיר את החוקים לגבי שמירה והתיחסות לסטרינגים (שאני כותב סטרינג אני מתכוון לאחד מהסוגים הבאים - לchar, varchar, nchar, nvarchar, text וntext). החוקים הם איך לשמור מאחורי הקלעים את הסטרינג, איך למיין את הסטרינגים, האם להתיחס לa כמו לA וכד'. במקרה שלך בכל טבלה מוגדר collation שונה ולכן ה"חוקים" שלפיהם השרת מתייחס לסטרינגים הם שונים. כדי לפתור את המצב, את יכולה להגדיר בשאילתה שלך שהשרת יבצע המרה של הcollation באחת הטבלאות. לדוגמא - נניח, שיש לי את 2 הטבלאות הבאות עם collation שונה:
create table tab1 ( MyString varchar(20) collate Albanian_CI_AI_KS_WS ) go create table tab2 ( MyString varchar(20) collate Chinese_PRC_CI_AI )​
אני מריץ את השאילתה הבאה:
select MyString from tab1 union select MyString from tab2​
אני מקבל את הודעת השגיאה, שגם את קיבלת. ע"מ להמשיך לעבוד, אני נותן לשרת הודעה להתייחס לנתונים בטבלה tab2 כאילו הcollation שלהם הוא Albanian_CI_AI_KS_WS
select MyString from tab1 union select MyString collate Albanian_CI_AI_KS_WS from tab2 string​
פתרון אחר הוא לשנות את הcollation באחת הטבלאות, אבל לא תמיד זה ישים (למרות שלרוב זה הפתרון הנכון).
 
למעלה