PDA

View Full Version : سوال: اضافه كردن شرط به select



s_savabi
شنبه 29 خرداد 1389, 13:51 عصر
خسته نباشيد دوستان
ميخام توي يه پروسيجر sql يك select بنويسم كه شرط هاي select متغيره يعني به ازاي شرايط مختلف شرط هاش فرق ميكنه ولي دستورم تا قبل از where ثابته. چطوري ميتونم شرطها رو بهش اضافه كنم؟
مثلا

Select * From Customer
if @N=0
شرط 1
if @N=1
شرط 2
if @N=2
شرط 1 و شرط 2

حالا من چطوري اين شرط ها رو به دستور Select اضافه كنم؟
چون تعداد حالات هم زياده نميتونم واسه هركدوم يه دستور select جدا بنويسم.
لطفا راهنمايي كنيد

محمد سلیم آبادی
شنبه 29 خرداد 1389, 14:51 عصر
من فکر می کنم مشکل اصلی شما چیز دیگه ای باشه، یعنی جستجوی پویا.
http://www.sommarskog.se/dyn-search-2005.html#introduction

ولی برای این مشکل می تونید از CASE استفاده کنید به این شکل:

SELECT * FROM Customer
WHERE CASE WHEN @N = 0 THEN
CASE WHEN Condition_1 THEN 1 ELSE 0 END
WHEN @N = 1 THEN
CASE WHEN Condition_2 THEN 1 ELSE 0 END
WHEN @N = 2 THEN
CASE WHEN Condtion_1 AND Condition_2 THEN 1 ELSE 0 END
END = 1;

s_savabi
یک شنبه 30 خرداد 1389, 10:04 صبح
مرسي دوست عزيز از راهنماييتون اما منظور من اينه كه
فرض كنيد ميخام نام يك جدول رو به صورت متغير داشته باشم،اونوقت بايد چكار كنم؟
مثلا
Select * From @n
كه n@ متغيري است كه نام جدول رو در خودش داره
چطوري ميشه اين كار رو كرد؟

محمد سلیم آبادی
یک شنبه 30 خرداد 1389, 10:59 صبح
مرسي دوست عزيز از راهنماييتون اما منظور من اينه كه
فرض كنيد ميخام نام يك جدول رو به صورت متغير داشته باشم،اونوقت بايد چكار كنم؟
مثلا
Select * From @n
كه n@ متغيري است كه نام جدول رو در خودش داره
چطوري ميشه اين كار رو كرد؟

این یک سوال دیگه هست که!

باید از دستور exec استفاده کنید:

declare @sql varchar(500)
set @sql='select * from '+@n
exec(@sql)

s_savabi
یک شنبه 30 خرداد 1389, 13:38 عصر
مرسي دوست عزيز
حالا اگه بخام خروجي اين select رو استفاده كنم،بايد چكار كنم؟

declare @sql varchar(500)
set @sql='select Name from '+@n
exec (@sql

حالا من فيلد Name رو ميخام . چجوري بهش دسترسي پيدا كنم؟

Modifier
یک شنبه 30 خرداد 1389, 13:56 عصر
مرسي دوست عزيز
حالا اگه بخام خروجي اين select رو استفاده كنم،بايد چكار كنم؟

declare @sql varchar(500)
set @sql='select Name from '+@n
exec (@sql

حالا من فيلد Name رو ميخام . چجوري بهش دسترسي پيدا كنم؟

2 راه دارين..

ايجاد table مجازي :



@Output_Parameters bigint Output

As

create table #TBL_Temp (Outputvalue bigint)
set @str ='insert into #TBL_Temp SELECT...
exec sp_executesql @str
set @Count_Record =(select Outputvalue from #TBL_Temp)
set @Output_Parameters = @Count_Record


راه بعدي ايجاد table فيزيكي در هنگام انجام select با دستور into و بعد مقدار مربوط رو واكشي كنيد و بعد drop table كنيد..

راه اول بهتره...

موفق باشي.

يا علي.

محمد سلیم آبادی
یک شنبه 30 خرداد 1389, 14:15 عصر
مرسي دوست عزيز
حالا اگه بخام خروجي اين select رو استفاده كنم،بايد چكار كنم؟

declare @sql varchar(500)
set @sql='select Name from '+@n
exec (@sql

حالا من فيلد Name رو ميخام . چجوري بهش دسترسي پيدا كنم؟

میتونید نتیجه ی این کوئری را داخل یک جدول درج کنید. سپس با کوئری گرفتن از جدول می تونید به این مقدار دسترسی پیدا کنید.

declare @t table(n nvarchar(500))
insert into @t
execute('select Name from '+@n)

Modifier
دوشنبه 31 خرداد 1389, 19:02 عصر
میتونید نتیجه ی این کوئری را داخل یک جدول درج کنید. سپس با کوئری گرفتن از جدول می تونید به این مقدار دسترسی پیدا کنید.

declare @t table(n nvarchar(500))
insert into @t
execute('select Name from '+@n)

ميشه فرق @T رو با #T بگين ...

ممنون.

ياعلي.

محمد سلیم آبادی
دوشنبه 31 خرداد 1389, 19:07 عصر
یک متغیر جدولی (Table Variable) داریم که مثل همه ی متغیر های دیگه نامش با علامت @ شروع میشه.
از طرفی جدول موقت (Temporary Table) داریم که شامل دو نوع هست. Global و Local، نوع محلیش با کاراکتر # آغاز میشود.
می تونید برای اطلاعات در این مورد به Book Online رجوع کنید.