שישור STRING בתוך SP

MacMac7

New member
שישור STRING בתוך SP

בוקר טוב לכולם. יש לי שאילתת SP ששולפת נתונים לפי תאריכים. שדות התאריכים הם שדות חובה בשליפה אבל למשתמש יש עוד 5 שדות שהוא יכול לסנן את השליפה לפי שדות אלו. השדות הם לא חובה ויכולים לבוא במגוון שילובים. לא יהיה הגיוני לכתוב SP לכל שילוב של פרמטרים. חשבתי לבנות מחרוזת עם תנאי השליפה (בקוד) ואותה להעביר ל-SP. כיצד אני משרשר מחרוזת בתוך SP אשר יקבל את זה כמחרוזת ולא כפרמטר? אמיר
 

EdotK

New member
אז ככה:

יש כל מיני פתרונות ידועים לבעיה הזו. הפתרון הכי טוב הוא להשתמש בתחביר כזה:
SELECT ..... WHERE (@Argument1 IS NULL OR Field1 = @Argument1) AND (@Argument2 IS NULL OR Field2 = @Argument2) AND ...​
כך אתה יכול לכתוב רק SP אחד שתופס את כל המקרים, ללא צורך ב Dynamic SQL. כל פרמטר שאתה רוצה שהSP לא תתיחס אליו פשוט תשלח DBNull (ולא סתם null כמובן)
 

24sharon

New member
אני משתמשת הרבה בפטנט הזה.

אבל לצערי, לאחר שאני כותבת את את השאילתא, מחולל השאילתות של הSQL 'מסדר' לי אותה לטובת הרבה AND. זה כ"כ מעצבן כי כשצריך שינוי צריך ממש 'לשכתב' מחדש.
 

24sharon

New member
נכון אני כותבת ביד, (לא את הכל ../images/Emo3.gif)

אבל אח"כ זה משתנה אוטומטית. באמת רציתי לדעת איך אפשר לעשות שזה לא ישנה אוטומטית.
 

24sharon

New member
הנה דוגמא, וזה מאוד מאוד מעצבן אותי

אני כותבת כך:
select ..... from.... where (firstmeeting < getdate()) and (@firstName is null or tblCandi.candiFName = @firstName) and (@lastName is null or tblCandi.candiLName=@lastName)​
ואוטומית זה משתנה לכך:
WHERE (q_CA_firstMeetingForCandi.firstMeeting < GETDATE()) AND (@firstName IS NULL) AND (@lastName IS NULL) OR (q_CA_firstMeetingForCandi.firstMeeting < GETDATE()) AND (@lastName IS NULL) AND (tblCandi.candiFName = @firstName) OR (q_CA_firstMeetingForCandi.firstMeeting < GETDATE()) AND (@firstName IS NULL) AND (tblCandi.candiLName = @lastName) OR (q_CA_firstMeetingForCandi.firstMeeting < GETDATE()) AND (tblCandi.candiFName = @firstName) AND (tblCandi.candiLName = @lastName)​
יכול להיות שזה בגלל שיש את הPANE של הCRETERIA?
 
לא מומלץ להשתמש במחולל השאילתות

אלא לכתוב שאילתא לבד לגמרי. אם את ב- sql 2000 אז זה אומר לעבוד עם query analyzer ולא עם enterprise manager (בהקשר הזה). ב- sql 2005 פשוט ללחוץ על הכפתור new query משמאל למעלה.
 
למעלה