PDA

View Full Version : نوع داده ای پارامتر مرتب سازی در StoreProcedure



ariadpg
سه شنبه 08 اسفند 1391, 11:57 صبح
سلام. StoreProcedure زیر را در نظر بگیرید
CREATE PROCEDURE stpSearchRequest

@FRequestDate int=Null,
@TRequestDate int=Null,
@Name nvarchar(50)=Null,
@Family nvarchar(50)=Null,
@IdentNo bigint=Null,
@RequestSubject int=Null,
@RequestType int=Null,
@RequestStatus int =Null,
@RName nvarchar(50)=Null,
@RFamily nvarchar(50)=Null,
@CityName nvarchar(50)=Null,
@RCityName nvarchar(50)=Null,
@ReportType int=Null

As

If @ReportType = 0
Select * From vwRequest
where (
(@FRequestDate is null or VoteDate>=@FRequestDate) and
(@TRequestDate is null or VoteDate<=@TRequestDate ) and
(@Name is null or [Name] like '%'+@Name+'%' ) and
(@Family is null or Family like '%'+@Family+'%' ) and
(@IdentNo is null or IdentNo = @IdentNo ) and
(@RequestSubject is null or RequestSubject= @RequestSubject ) and
(@RequestType is null or RequestType = @RequestType ) and
(@RequestStatus is null or RequestStatus = @RequestStatus) and
(@RName is null or RName like '%'+@RName+'%' ) and
(@RFamily is null or RFamily like '%'+@RFamily+'%' ) and
(@CityName is null or CityName like '%'+@CityName+'%' ) and
(@RCityName is null or RCityName like '%'+@RCityName+'%' ) and
(VoteNo is Not Null )
)
order by MakhtoomeNo,Family
می خواهم در جلوی Order By فیلدی که بایستی مرتب سازی بر اساس آن انجام گیرد را بصورت پارامتر به آن پاس کنم ، این پارامتر را باید از چه نوع داده ای تعریف کنم ؟ از نوع NvarCHar تعریف کردم ولی قبول نکرد پیغام خطا می داد.

یوسف زالی
سه شنبه 08 اسفند 1391, 12:12 عصر
باید در SQL مطرح می کردی اما اجالتا:
Order By Case ..
این راه می تونه مشکل شما رو حل کنه.
اما اگر نمی دونی چه ورودی هایی داری باید داینامیک کوئری استفاده کنی.

baktash.n81@gmail.com
سه شنبه 08 اسفند 1391, 14:16 عصر
سلام


ORDER BY
CASE
WHEN @sortColumn = 'VoteDate' THEN VoteDate
WHEN @sortColumn = 'IdentNo' THEN IdentNo

ELSE CityName
END

محمد سلیم آبادی
چهارشنبه 09 اسفند 1391, 09:19 صبح
سلام


ORDER BY
CASE
WHEN @sortColumn = 'VoteDate' THEN VoteDate
WHEN @sortColumn = 'IdentNo' THEN IdentNo

ELSE CityName
END

عبارت/دستور CASE اتان می تواند ساده تر شود.
به عبارتی هر گاه شرط های موجود در CASE بر اساس مقدار یک عبارت هستند می توان آن عبارت را بلافاصله بعد از کلمه CASE نوشت و از تکرار عبارت(در مثال ما sortColumn@) جلوگیری نمود. با این کار دو هدف را دنبال می کنیم:


خوانایی
کوتاه شدن کد

ORDER BY
CASE @sortColumn
WHEN 'VoteDate' THEN VoteDate
WHEN 'IdentNo' THEN IdentNo
ELSE CityName
END;