מיון לפי עמודה משתנה ב Stored Procedures
הזכרנו מספר פעמים את היתרון של stored procedures מנקודת אבטחת מידע. אולם אחת הבעיות שיש ב stored procedures היא שיש נתונים שלא ניתן להעביר כפרמטר, לדוגמה, העמודה לפיה ממיינים. נניח שיש לי דף שניתן למיון לפי מספר עמודות, לא ניתן להעביר ל stored procedure את שם העמודה למיון בצורה הבאה:
create procedure temp1
@sortName varchar(20)
as
begin
select * from
article order by @sortName
end
אז מה כן עושים אם אנו עדיין רוצים להמשיך להשתמש ב stored procedures וגם לאפשר מיונים לפי שדות שונים?
אז צריך קצת להתחכם, וגם לסרבל, אבל עדיין נראה לי שזה שווה את זה...
נניח שיש לי 2 עמודות שניתן למיין לפיהן, וגם ניתן למיין בסדר עולה או יורד. אז
נכון שתמיד ניתן להשתמש ב sp_executesql , אבל אז הלכה כל התועלת של שימוש ב stored
procedure... מישהו פעם הציע לי לבנות 4 stored procedures... כמובן שזה לא
סביר... אבל נעשה משהו די דומה:)
create procedure temp1
@sortName varchar(20),
@sortDirection varchar(4)='asc'
as
begin
select * from
article order by
case WHEN @sortName = 'article_id' and @sortDirection='asc' THEN article_id end asc,
case WHEN @sortName =
'article_id' and @sortDirection='desc' THEN article_id end desc,
case WHEN @sortName = 'publish_date' and @sortDirection='asc' THEN publish_date end asc,
case WHEN @sortName =
'publish_date' and @sortDirection='desc' THEN publish_date end desc
end