PDA

View Full Version : مشکل با دستور if



jd.mn98
پنج شنبه 31 مرداد 1392, 08:12 صبح
سلام دوستان
می خواستم ببینم این دستور درسته یا نه
من می خوام اگر برای پارامتر noebearing@ هیچی ننویسم یه دستور دیگه اجرا بشه

ALTER PROCEDURE [dbo].[search_bearing]
@numbearing varchar(10) , @brand varchar(20) , @noebearing varchar(5)
AS
BEGIN
if (@noebearing=NULL)
begin
select * from view_all
end
else
begin
select * from View_bearing
where numbearing=@numbearing or brand=@brand or noebearing=@noebearing

END
end

یعنی وقتی در محیط کوئری می نویسم

execute search_bearing 6000,'quest'

خطا می ده و میگه
Msg 201, Level 16, State 4, Procedure search_bearing, Line 0
Procedure or function 'search_bearing' expects parameter '@noebearing', which was not supplied.

Salah Sanjabian
پنج شنبه 31 مرداد 1392, 09:05 صبح
سلام سوالت رو باید تو تالار TSQL مطرح کنی
3 تا پارامتر باید به پروسیجرت پاس بدی . اگر هم نمیخوای چیزی بفرستی باید با Null مشخص کنی

execute search_bearing null, 6000,'quest'

به این صورت باید با مقادیر Null کار کنی

if @noebearing IS NULL

jd.mn98
پنج شنبه 31 مرداد 1392, 09:55 صبح
من این روش دوم شما رو بکار بردم ولی باز هم نشد همون ارور رو داد

این رو هم بگم که من این بانک رو به سی شارپ متصل کردم و کاربر که نمیدونه تکست باکسی مربوط به noebearing میشه باید توش null بنویسه تا دستور if کار کنه.

Salah Sanjabian
پنج شنبه 31 مرداد 1392, 15:37 عصر
به این صورت باید استفاده کنید.

EXEC search_bearing
@numbearing = NULL,
@brand = N'1',
@noebearing = 'quest'

تو #C هم اگه کاربر چیزی وارد نکرد باید DBNull.Value رو به پروسیجر پاس بدین

Reza_Yarahmadi
شنبه 02 شهریور 1392, 10:10 صبح
یه راه دیگه اینه که SP رو بصورت زیر تغییر بدید
ALTER PROCEDURE [dbo].[search_bearing]
@numbearing varchar(10),
@brand varchar(20),
@noebearing varchar(5) = NULL
AS
BEGIN
if (@noebearing IS NULL)
begin
select * from view_all
end
else
begin
select * from View_bearing
where numbearing=@numbearing or brand=@brand or noebearing=@noebearing

END
end
زمان صدا کردنش هم در اگه با دستور TSQL باشه بصورت زیر
EXEC search_bearing
@brand = N'1',
@numbearing = 'quest'
و توی برنامه هم نیازی به فرستادن پارامتر با مقدار NULL نیست.
توی این حالت اگه پارامتر به SP ارسال نشه مقدار پیش فرضی که در زمان تعریف پارامتر ورودی قرارداده شده بعنوان مقدار اون پارامتر در نظر گرفته میشه.