שאלה בקשר לstored procedurs

azdavid

New member
שאלה בקשר לstored procedurs

יש לי את השאילתה הבאה
ALTER PROCEDURE [dbo].[selectHtmaaReporting] @solve int, @solveFlag bit AS declare @string1 nvarchar(400), @addition nvarchar(100) set @addition = '' if(@solve > 0) begin set @addition = ' and PhoneTurn.solve = 1'/* + cast(@solveFlag as nvarchar(4))*/ end set @string1 = 'SELECT PhoneTurn.id, PhoneTurn.solutionQuestion,PhoneTurn.nameWoker,PhoneTurn.topicQuestion,PhoneTurn.bodyQuestion,PhoneTurn.date,PhoneTurn.solve, PhoneTurn.PhoonCall,Region.region,Team.team,TypeQuestion.nameTypeQuestion from PhoneTurn, Region,Team,TypeQuestion Where PhoneTurn.idRegion = Region.id and PhoneTurn.idTeam = Team.mainId and PhoneTurn.idTypeQuestion = TypeQuestion.id' exec sp_executesql @string1​
כאשר אני מריץ את השאילתה הזאת אני לא נכנס לתנאי של הIF בכלל למה, כאילו אם אני מוריד את הIF הכול עובד שגיעון אני מקבל כתוצאה את הטבלה שלי אבל לIF אני לא נכנס למשהו יש רעון למה לא נכנס לי לתנאי ? תודה
 
המשתנה @solve לא מאותחל

המשתנה שלך לא מאותחל, והערך שלו הוא Null. כל השוואה של null לערך אחר (כולל null) חוזר כfalse, לכן בכל פעם שתשווה את @solve לערך אחר, התוצאה תהיה שלילית. ראה דוגמת קוד, שממחישה את זה:
declare @solve int if @solve > 0 select 'solve > 0' else select 'solve !< 0' if @solve = 0 select 'solve = 0' else select 'solve != 0' if @solve < 0 select '0 > solve' else select '0 !> solve'​
 
טעות שלי

לא שמתי לב שבמדובר בפרמטר ולא במשתנה. עושה רושם, שהפרמטר solve@ פשוט מקבל ערך שהוא לא גבוה מ0 (או את הערך null).
 

24sharon

New member
גם אני חשבתי את זה:)

אבל הנטייה שלי היא הסוגריים לאחר משפט הIF מה כאן זה C#? אבל בהחלט יכול להיות שאני טועה.
 

azdavid

New member
כן הסינטקס בהחלט דומה לc# והפתרון

הוא מאוד דבילי פשוט לא שרשרתי את המשתנה addition לשאילתה, סורי אבל לפחות הבנתם כמה דברים בSP מאוד ממליץ להעמיק בזה חוסף המון קוד בתוכנית ורץ 10
 
למעלה