שואל
WITH rowForPager AS לא מציג שדות מסוג nvarchar(MAX)

דיון כללי
-
יש לי שאילתא SQL שאני מריצה בדף ASP קלאסי ע"י ADO,
המבנה:
WITH rowForPager AS ( SELECT ROW_NUMBER() OVER(ORDER BY DateUpdate DESC) as Row_num,TextDscrb... ) SELECT * FROM rowForPager WHERE Row_num BETWEEN 20 AND 30
השדה TextDscrb היה מוגדר nvarchar (4000) ואז הכל עבד כשורה.
לאחרונה הייתי צריכה לשנות את הגודל של השדה לnvarchar(MAX)
אבל אז הוא הפסיק לשלוף את השדה TextDscrb.
כלומר השאילתא לא יוצרת באג כלל, שאר השדות נשלפים ומוצגים כהלכה. אבל השדה הזה מוצג קבוע כריק.
אם אני מריצה את השאילתא ישירות על הMSSMSE אז זה עובד טוב ומחזיר את כל התוצאות לא משנה איך מוגדר השדה.
יש פתרון?
- שינה את הסוג Eran Sharvit יום חמישי 25 אוקטובר 2012 15:34
יום שלישי 16 אוקטובר 2012 08:19
כל התגובות
-
היי,
כבר הרבה זמן שלא התעסקתי עם classic asp ושדות text.
nvarchar(max) מבחינת ה ADO זה כמו שדה text
אז חוק ראשון וחשוב ביותר כאתר את עושה select תוודאי שהוא השדה האחרון ב SELECT.
שאילטה טובה:
select id,some_vacrhar,mynvarcharmax from sometale
שאילטה לא טובה
select id,mynvarcharmax,some_varchar from sometable
חוק שני:
להעביר את השדה למשתנה.
dim temp
temp = rs("mynvarcharmax ")
ככה זה מכריח אותו להעביר את הנתונים לזכרון.
בד"כ זה עבד לי בצורה הזאת.
בהצלחה
יום רביעי 17 אוקטובר 2012 07:57 -
ניסיתי את מה שאמרת.
אני מניחה שמה שכתבת בנוגע לסדר כתיבת השדות קשור יותר לביצועים מאשר לתקינות השאילתא לא?
בכל אופן יישמתי את 2 ההמלצות וזה לא עזר.
תודה על הרצון הטוב.
החלטנו שבנתיים מכיון שב8 שנים האחרונות רק פעם אחת נוצר לנו צורך בשדה גדול יותר. לא יקרה כלום אם נגביל לכתחילה את גודל השדה ל4000 תווים, כך שיכולנו לחזור אחורה, והדף חזר לעבוד כרגיל.
יום רביעי 17 אוקטובר 2012 08:06 -
לא מדובר על ביצועים.
אלה דרך עבודה מול שדה מסוג טקסט רק אחרי שהייתי עובד ככה היה ניתן לשלוף את שדה הטקסט.
יום רביעי 17 אוקטובר 2012 10:42 -
ביטלתי את הסימון כתשובה מכיון שהתשובה לא הועילה לי.
אין לי בעיה בשליפה סתם של שדה nvarchar(MAX)
כל הבעיה היא כשבמקום משפט SELECT רגיל השתמשתי בwith,
ובמקרה הזה העצה שנתת לי לא הועילה
WITH rowForPager AS ( SELECT ROW_NUMBER() OVER(ORDER BY DateUpdate DESC) as Row_num,TextDscrb... ) SELECT * FROM rowForPager WHERE Row_num BETWEEN 20 AND 30
יום חמישי 18 אוקטובר 2012 12:20 -
הי,
קודם כל בסדר גמור שביטלת את סימון התשובה שלא הועילה (-:
שנית, מהו סטטוס השאלה? האם מצאת פתרון בינתיים?
תודה,
צוות הפורומים.
מיקרוסופט מציעה שירות זה ללא תשלום, למטרת סיוע למשתמשים והעשרת הידע הקשור בטכנולוגיות ובמוצרים של מיקרוסופט. תוכן זה מתפרסם כפי שהוא והוא אינו מעיד על כל אחריות מצד מיקרוסופט.
יום חמישי 25 אוקטובר 2012 13:21 -
סטטוס השאלה הוא שהתיאשתי :) יש סטטוס כזה?
כמו שכתבתי בתשובה לSharvit שאלתי את השאלה. כי אתה יודע לפעמים יש פתרונות מוכנים שלא הכרת והם פשוטים
אבל ברגע שזה לא המצב החלטנו שלא שווה להשקיע זמן במציאת פתרון מורכב אלא פשוט כן להגביל את הגולשים בהכנסת טקסט עד 4000 תווים. במיוחד שכמו שציינתי ב8 שנים האחרונות הפעם היחידה שמשהו נתקל בחסימה זו היתה לפני כחודש..
יום חמישי 25 אוקטובר 2012 13:37