View Full Version : sp ی برا مرتب کردن جدول براساس فیلد ورودی
h.alizadeh
پنج شنبه 05 اردیبهشت 1387, 23:48 عصر
سلام،
من یک spساختم می خوام در این sp نام یک فیلد رو بعنوان ورودی دریافت کنم و خروجی هم جدول مرتب شده براساس این فیلد ورودی رو برگردونم
این کدهای منه:
CREATE PROCEDURE orderingnews
@fieldname as varchar(20)
AS
select * from news order by @fieldname
GO
اما برام خطا میده که درست نیست از قسمت order byایراد می گیره
میشه راهنمایی کنید چجوری می تونم اینکار رو بکنم؟
تشکر
twelve
جمعه 06 اردیبهشت 1387, 00:41 صبح
order باید برحسب یک ستون باشه نه پارامتر!
مثال
select * from [table] order by [Identity]
Amir_Safideh
جمعه 06 اردیبهشت 1387, 08:03 صبح
دستور Select رو به این صورت بیار .
Exec('select * from news order by '+@fieldname)
چون در حالت عادی نمیشه که نام فیلد رو به صورت پارامتر ارسال کرد . مگر اینکه کل متن Select رو به عنوان یک رشته یک پارچه معرفی کنی و پارامترها رو هم به عنوان رشته به Select اضافه کنی .
---------------
موفق باشید .
h.alizadeh
جمعه 06 اردیبهشت 1387, 22:12 عصر
دستور Select رو به این صورت بیار .
Exec('select * from news order by '+@fieldname)
چون در حالت عادی نمیشه که نام فیلد رو به صورت پارامتر ارسال کرد . مگر اینکه کل متن Select رو به عنوان یک رشته یک پارچه معرفی کنی و پارامترها رو هم به عنوان رشته به Select اضافه کنی .
---------------
موفق باشید .
ممنون پس با این حساب نمیشه من همچین sp ای بسازم ،درسته؟
این رو من اینجوری توی کوئری نوشتم:
Exec('select * from news order by '+nid)
برام این خطا اومد:
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'nid'.
(nid نام یکی از ستونهای منه)
h.alizadeh
جمعه 06 اردیبهشت 1387, 22:14 عصر
order باید برحسب یک ستون باشه نه پارامتر!
مثال
select * from [table] order by [Identity]
ممنون اما شما توی این تایپیک (http://barnamenevis.org/forum/showthread.php?t=103066) به من گفتید که:
dad= New SqlDataAdapter( "Select * From news Order By " & strSortField , con )
بهتره برای کار روی داده های بانک از sp استفاده کنی
خب اگه نمیشه نام ستون رو برای دستورorder بصورت پارامتر بدم چجوی می تونم برای اینکار از sp استفاده کنم؟!
twelve
جمعه 06 اردیبهشت 1387, 22:40 عصر
آره منظورم این بود یک Select رو توی Sp بنویسی که داده های جدول رو بر حسب پارامتر ورودی واکشی کنه ، نه که بر حسب اون مرتب کنه ، مرتب کردنش کاری نداره شما در ساده ترین حالت میتونید یک فیلد Identity داشته باشید و داده ها رو در بازیابی بر حسب اون مرتب کنید که کدش رو اون بالا گفتم
اما واسه صفحه بندی باید اول طرح داشته باشی ، مثلا اینکه در هر صفحه چند تا سطر از جدول رو نمایش بدی ؟ و ... که بر اساس اون طرح Sp خودت رو بنویسی که در مورد اون تاپیک خاصی که مثال زدید استفاده از دیتالیست کارآمد تر و راحت تره.
سر افراز باشید.
h.alizadeh
جمعه 06 اردیبهشت 1387, 23:24 عصر
آره منظورم این بود یک Select رو توی Sp بنویسی که داده های جدول رو بر حسب پارامتر ورودی واکشی کنه ، نه که بر حسب اون مرتب کنه ، مرتب کردنش کاری نداره شما در ساده ترین حالت میتونید یک فیلد Identity داشته باشید و داده ها رو در بازیابی بر حسب اون مرتب کنید که کدش رو اون بالا گفتم
ببینید من توی اون برنامه م می خوام که براساس تقریبا تمام فیلدهای دیتاگرید امکان مرتب سازی داشته باشم بجز(یکی دوتا از فیلدها)
مثلایکبار می خوام رکوردها رو براساس تاریخ مرتب کنم یک بار دیگه شاید بخوام براساس مثلا عنوان ها مرتب کنم و...
یعنی اون فیلد موردنظر من که مرتب سازی براساس اون فیلد صورت میگیره یک پارامتر ورودی هست...
اما شما داری می گی می تونی یک فیلد identity داشته باشم که داده ها براساس اون مرتب بشه که این موردنظر من نیست...
قسمتی که آبی کردم یعنی شما منظورت اینه که من مثلاپیش فرض براساس یک فیلدمرتب کنم بعد وقتی داده ها رو واکشی کردم اونا روخودم توی برنامه مرتب کنم؟!
میشه در این موردبا مثال و کد بهم یاد بدید البته اگه میشه بریم تو اون تایپیک چون مربوط به اون تالار میشه
ممنون
ویک چیز دیگه:
مثلا اینکه در هر صفحه چند تا سطر از جدول رو نمایش بدی ؟ و ... که بر اساس اون طرح Sp خودت رو بنویسی
تعداد صفحات رو من در دیتاگرید معین کردم ولی اینکه بخوام spرو براساس تعداد صفحات بکار ببرم رو خوب متوجه نمیشم
خوشحال میشم راهنمایی کنید http://qsmile.com/qsimages/26.gif
Amir_Safideh
شنبه 07 اردیبهشت 1387, 11:45 صبح
ممنون پس با این حساب نمیشه من همچین sp ای بسازم ،درسته؟ کی گفته که نمیشه . به راحتی میتونید این رو در قالب یک SP پیاده سازی کنید .
CREATE PROCEDURE SPS_Test
@FieldName char(30) AS
Exec('select * from news order by '+@fieldname)
-----------
موف باشید .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.