PDA

View Full Version : شرط گذاری در بخش where دستور select ؟



baran_2005
پنج شنبه 27 بهمن 1390, 12:42 عصر
یک sp نوشتم که از ورودی 4 تا پارامتر بولین می گیره با توجه به اینکه هر کدوم از این پارامترها true باشد باید در دستور where شرط مربوط به ان اضافه شود . اگر بخوام دستورات where جدا بنویسم میشه 4! . چه کار میتونم انجام بدم ؟
مثلا


declare @t varchar(50)
declare @t1 varchar(50)
set @t='TRUE'
set @t1='TRUE'
select * from table1
where
if (@t='TRUE')
a = 1
else
b = 2
if (@t1='TRUE')
c = 2

result :
select * from table1
where a = 1 and c = 2

یوسف زالی
پنج شنبه 27 بهمن 1390, 13:02 عصر
سلام.
این کاملا به ساختار شرط های شما بستگی داره.
اما می تونید این کار رو انجام بدید:
select * from TBL
where (Bool1 = 0 or F1 = Val1) and (Bool2 = 0 or F2 = Val2) and .. --sql

baran_2005
پنج شنبه 27 بهمن 1390, 13:22 عصر
ممنون از اینکه زود پاسخ دادین ولی باز هم این طوری مشکل دارم . البته یک راه حل دیگه پیدا کردم البته هنوز امتحانش نکردم کل دستورات به صورت رشته ای ارسال کنم و با دستور exec اجرا کنم

tiphooo
پنج شنبه 27 بهمن 1390, 14:26 عصر
declare @t varchar(50)
declare @t1 varchar(50)
set @t='TRUE'
set @t1='TRUE'
select * from table1
where
if (@t='TRUE')
a = 1
else
b = 2
if (@t1='TRUE')
c = 2

result :
select * from table1
where a = 1 and c = 2
دوست عزیز این کدی که شما نوشتید اصلا مربوط به SQL نیست و اینکه سوال شما هم کاملا مبهم است
در صورت امکان دقیقتر سوال را بپرسید تا جواب بهتری بگیرید
اینجا a , b , c اصلا چی هستند . متغیر بولین را چرا از نوع رشته ای وارد کردید ؟

pezhvakco
پنج شنبه 27 بهمن 1390, 17:43 عصر
کل دستورات به صورت رشته ای ارسال کنم و با دستور exec اجرا کنم
اگه می خوایین این کار رو انجام بدین بهتره در همون محیط برنامه نویسی کد نویسی و اجرا نمایید .
چون همه اینکه SP بکار میره برای اینه که کد های نوشته شده نیاز به دوباره تست شدن نداشته باشه و د رمحیط خود SQL اجرا بشه .

baktash.n81@gmail.com
شنبه 29 بهمن 1390, 08:35 صبح
سلام

اگه خواستی حتما پارامتر ها رو تو SP چک کنی و یک شرط Where متناسب با اونها بسازی بهتره که از If بیرون دستور Select استفاده کنی ... یعنی چهارتا If تودر تو بنویسی و برای هر کدوم یه Select بنویسی ... به صورتی که اگه دستور مورد نظر اجرا شد بقیه IF ها رو چک نکنه ... البته استفاده از exec هم یه روشه ... روش هایی که دوستان هم گفتند خوبه... باید ببینی کدومش مناسب کار شماست ... شاید بهتره باشه همشو امتحان کنی و روش خودتو انتخاب کنی ... این مشخص کننده دست خط شماست ... مهم اینه که برنامه یکدست نوشته بشه ... تو روشی که من گفتم انجام تغییرات رو کد سخته مثلا اگه اسم یه فیلد عوض بشه شما باید 4 تا دستور رو Update کنی ...