עבודה נכונה ב SQL

udiko

New member
עבודה נכונה ב SQL

בניתי טופס שמקבל מספר פרמטרים ולפי זה מציג את הנתונים לשם כך אני כותב SP שמקבל פרטמרים ובונה לפי זה שאילתה ב QUERY ANALYZER כתבתי:
DROP PROCEDURE aaaa GO CREATE PROCEDURE aaaa ( @Region nvarchar(40) ) AS if @Region = '0' SELECT * FROM Post else SELECT * FROM Post WHERE Region = @Region GO execute aaaa 'תל-אביב'​
הבעיה שיש עוד המון פרמטרים להעביר ובצורה הזאת יהיו לי מליון אפשריות איך לבנות נכון SP שכזה ? תודה
 

דממה

New member
../images/Emo26.gif

קודם כל הערה קטנה - לא כותבים DROP לאובייקט, אלא אם וידאת שהוא קיים, לדוגמא:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[aaaa]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[aaaa] GO​
ועכשיו לעניין... אני מניח שמיליון פרמטרים לא יהיו לך... והמקסימום האפשרי יהיה כמס' השדות בטבלה, אבל בטח גם לא תתן למשתמש לסנן לפי כולן... נניח שתרצה לתת למשתמש אפשרות סינון לפי עיר, איזור, רחוב, מס' בית ומיקוד, אז ניתן לצמצם לשאילתא אחת באמצעות OR:
CREATE PROCEDURE aaaa @Region nvarchar(40), @City nvarchar(40), @Street nvarchar(40), @HouseNo smallint @ZipCode smallint AS SELECT * FROM Post WHERE (Region = @Region OR @Region IS NULL) and (City = @City OR @City IS NULL) and (Street = @Street OR @Street IS NULL) and (HouseNo = @HouseNo OR @HouseNo IS NULL) and (ZipCode = @ZipCode OR @ZipCode IS NULL)​
עכשיו אתה יכול להפעיל את הפרוצדורה עם פרמטר אחד או יותר וכך הלאה...
 

udiko

New member
בעיה קטנה עם משפט LIKE

לא עובד משפט LIKE
(Post.Notes like '%@Notes%' OR @Notes IS NULL) AND​
 

דממה

New member
הבעיה שלך אחרת בכלל

יש לך טעות סינטקס בסיסית:
(Post.Notes like '%'+@Notes+'%' OR @Notes IS NULL) AND​
 
למעלה