שירשור טקסט sql לא עובד ומחזיר null
-
למה sql לא מסוגל לשרשר טקסט כמו בן אדם???? למה????
שעתיים הלכו לי על שטויות, ולא מצליח למצוא מידע נורמלי באינטרנט על ההתנהגות הזאת.declare @TableName sysname ,@Sql nvarchar(4000) , @CurrentRow int = 0 , @CurrentFieldName nvarchar(100) , @Currstr nvarchar(300) set @Currstr = 'aaa' set @Sql = @Sql + @Currstr insert into LogTable (Content) select @Sql
השמטתי דברים שלא נוגעים לכאן, כי זה קוד ארוך.
הערך המוחזר בטבלת לוג הוא תמיד nullפורסם במקור בפורום CODE613 ב27/01/2014 16:52 (+02:00)
-
בלי להתמקד בקוד שלך, תעשה ISNULL() על כל מה שאתה משרשר.
זה יבטיח שלא יהיו NULLים.
SQL בניגוד לVB וC# לא יכול לשרשר NULL עם עוד מחרוזת. ברגע שמשהו NULL, הכל NULL.ISNULL([fld1],N'' ) +ISNULL([fld2],N'' )
מקביל לNz באקסס...
פורסם במקור בפורום CODE613 ב27/01/2014 21:18 (+02:00)
-
הפתרון הסופי הוא שימוש בפוקנצייה CONCAT, תסתכל בקוד של תיעוד שינויים בדטה בייס שהעלתי לכאן.
אין באמת שירשור בSQL.זה עובד ב2008?
SELECT CONCAT ( 'Happy ', 'Birthday ', 11, '/', '25' ) AS Result;
מחזיר:
Msg 195, Level 15, State 10, Line 1 'CONCAT' is not a recognized built-in function name.
למרות שבמייקרוסופט כתוב שזה נתמך עד2012, משמע גם ב2008.
אני בכל אופן אוהב בשירשור להשתמש בISNULL כי ברוב המקרים כשזה NULL אני רוצה שיהיה כתוב משהו. לדוגמא: ללא קטגוריה
ודבר נוסף שISNULL יודע להתמודד גם עם מספרים וכו' מה שאומר שאפשר לברוח מהכפלה בNULL כי זה ייהפך ל0.פורסם במקור בפורום CODE613 ב27/01/2014 22:59 (+02:00)
-
אכן CONCAT זוהי פונקציה חדשה מ2012 (SERVER, הManagement Studio לא "מתערב" בעסק).
גירסאות קודמות צריכים להשתמש עם + ולוודא שהכל סטרינגים.
לSQL SERVER יש IDE נורמלי לחלוטין. רק שאתם ירוקים בעסק... כל מי שמתחיל ללמוד מסדי נתונים יודע שNull זה לא ערך. זה "בלתי ידוע" וממילא אם עושים לדוגמאDECLARE @VAR int; SELECT 100 - @VAR
התוצאה אינה 100 (כי לא חיסרנו ממנו כלום), אלא NULL! כי הSQL לא יודע כמה זה מאה פחות XXX.
פורסם במקור בפורום CODE613 ב29/01/2014 14:32 (+02:00)
-
@דוד ל.ט.
אכן CONCAT זוהי פונקציה חדשה מ2012 (SERVER, הManagement Studio לא "מתערב" בעסק).
גירסאות קודמות צריכים להשתמש עם + ולוודא שהכל סטרינגים.
לSQL SERVER יש IDE נורמלי לחלוטין. רק שאתם ירוקים בעסק... כל מי שמתחיל ללמוד מסדי נתונים יודע שNull זה לא ערך. זה "בלתי ידוע" וממילא עם עושים לדוגמאDECLARE @VAR int; SELECT 100 - @VAR
התוצאה אינה 100 (כי לא חיסרנו ממנו כלום), אלא NULL! כי הSQL לא יודע כמה זה מאה פחות XXX.
וכאן נכנס ISNULL לעסק.
DECLARE @VAR int; SELECT 100 - ISNULL(@VAR,0)
יחזיר 100, כי ISNULL הופך את הNULL למה שתכתוב בפרמטר השני שלו. (אם הייתי שם 1 בפרמטר השני הוא היה מחזיר 99)
פורסם במקור בפורום CODE613 ב29/01/2014 14:40 (+02:00)
-
סתם לידע כללי.
בC.
NULL של הסטנדרט של C מציין 0. וזה טוב. למצביעים לאובייקטים שאם זה 0 אז זה לא מצביע לשום מקום.וזה גם בif עובד כ false. ואין כזה דבר false בC אם מגדירים define ל FALSE אז הוא קיים.
בjs יש מושג שלא הכרתי בשפות אחרות Infinity שזה אומר אין סופי יש גם הפוך Infinity- למשל אם עושים 1/0 זה לא יוצר שגיאה זה מחזיר Infinity.
Infinity-1 זה תמיד Infinity.לא יודע אם זה קיים בC# לפי מה שאני זוכר חילוק ב0 היה עושה שגיאה אם יש אשמח להחכים.
פורסם במקור בפורום CODE613 ב29/01/2014 17:53 (+02:00)
-
בjs יש מושג שלא הכרתי בשפות אחרות Infinity שזה אומר אין סופי יש גם הפוך Infinity- למשל אם עושים 1/0 זה לא יוצר שגיאה זה מחזיר Infinity.
Infinity-1 זה תמיד Infinity.לא יודע אם זה קיים בC# לפי מה שאני זוכר חילוק ב0 היה עושה שגיאה אם יש אשמח להחכים.
חילוק של Double באפס מחזיר NaN, שזה אומר כלום. לא נוצרת שגיאה.
ומספר גבוה מידי או נמוך מידי מיוצג ע"י Infinity חיובי ושלילי בהתאמה.
ראה בMSDN.פורסם במקור בפורום CODE613 ב29/01/2014 19:12 (+02:00)