PDA

View Full Version : نحوه صحيح نوشتن يك دستور



mehdi_moosavi
دوشنبه 12 تیر 1391, 12:34 عصر
سلام، وقت بخير
من دستوري لازم دارم كه با هر بار Run شدن آن، نحوه سورت شدن اطلاعات بصورت پويا تعيين شود مثلاً:



select * from base order by (select cod from base where tip=10)

اگر فرضاً مقدار cod رو بوسيله دستور update تغيير بديم نحوه سورت شدن اطلاعات هم تغيير بكند.
البته دستور بالا هيچ خطايي نميگيره ولي سورت هم نميكنه.
لطفاً راهنمايي كنيد
با تشكر

baktash.n81@gmail.com
دوشنبه 12 تیر 1391, 13:40 عصر
سلام

می تونید از دستور Case بعد از Order By استفاده کنید ... به اینصورت که اول مقدار برگشتی از Select داخلی رو درون یه پارامتر قرار بدید مثلا SortOrder@ بعد ...


ORDER BY
CASE WHEN @SortOrder='LastName' THEN LastName -- Column Name
WHEN @SortOrder='Salary' THEN Salary -- Column Name
WHEN @SortOrder='SSN' THEN SSN -- Column Name
END

mehdi_moosavi
سه شنبه 13 تیر 1391, 10:29 صبح
سلام
شما اين دستور رو تست كرديد و جواب گرفتيد؟
ظاهراً اگر فيلدهايي كه در دستور case بكار رفته (lastname,firstname,...) از يك نوع باشه جواب مي‌ده ولي در صورتي كه مثلاً يكي int و يكي nvarchar باشه جواب نميده.

baktash.n81@gmail.com
سه شنبه 13 تیر 1391, 18:00 عصر
بله تست کردم استفاده هم کردم ...

با دستور Cast توع ها رو به یه نوع تبدیل کن خوب ...


Order by (case when @i=1 then username
when @i=2 then cast(user_id as nvarchar)
end)

ASKaffash
چهارشنبه 14 تیر 1391, 07:07 صبح
سلام
از Dynamic SQL استفاده کنید


سلام، وقت بخير
من دستوري لازم دارم كه با هر بار Run شدن آن، نحوه سورت شدن اطلاعات بصورت پويا تعيين شود مثلاً:



select * from base order by (select cod from base where tip=10)

اگر فرضاً مقدار cod رو بوسيله دستور update تغيير بديم نحوه سورت شدن اطلاعات هم تغيير بكند.
البته دستور بالا هيچ خطايي نميگيره ولي سورت هم نميكنه.
لطفاً راهنمايي كنيد
با تشكر