سؤال

أحتاج إلى عرض الشبكة على صفحة ويب.سوف تأتي البيانات من SQL Server 2008 من خلال إجراء مخزن.كما sproc يعود الآلاف من السجلات ، قررت أن تذهب الترحيل الخيار الذي يعمل بشكل جيد.في الإجراء المخزن أفعل شيئا من هذا القبيل:

declare @RowIdMin int=10  
declare @RowIdMax int=25  

select * 
from (select Col1, Col2, ROW_NUMBER() over (order by Col1 desc) as RowId  
      from MyTable ) dt  
where RowId BETWEEN @RowIdMin AND @RowIdMax    

هذا يعمل بشكل جيد طالما أن المستخدم هو سعيد للحصول على البيانات التي تم فرزها حسب Col1.كيف يمكنني كتابة هذا إذا كنت لا تعرف مقدما العمود الذي السجلات يجب أن تكون مرتبة ؟ هذا لا يعمل:

declare @RowIdMin int=10  
declare @RowIdMax int=25  

تعلن @ColSort varchar(100)='MyColumn'

select * 
from (select Col1, Col2, ROW_NUMBER() over (order by <b>@ColSort</b> desc) as RowId  
from MyTable) dt  
where RowId BETWEEN @RowIdMin AND @RowIdMax   
هل كانت مفيدة؟

المحلول

من الجدول ترتيب حسب الحالة عندما @ColSort = 'ABC' ثم ABC ....

تفسير أكثر دقة

http://www.extremeexperts.com/sql/articles/CASEinORDER.aspx

نصائح أخرى

ديناميكية SQL هو على الأرجح أفضل رهان;مبادلة خارج خيارات الفرز في row_number() وظيفة.يمكنك parameterize الخيارات في executesql انظر أيضا msdn

declare @SQLScript nVarchar(4000)

declare @RowIdMin int=10
declare @RowIdMax int=25
declare @ColSort varchar(100)='MyColumn'


Select @SQLScript = 'select * from (select Col1, Col2, ROW_NUMBER() over (order by ' + @ColSort + 'desc) as RowId from MyTable  dt where RowId BETWEEN ' + cast(@RowIdMin as nvarchar(100))+ ' AND ' + cast(@RowIdMax as nvarchar(100))

exec sp_executesql @SQLScript

أنا أتفق تماما مع غيرها من الوظائف الحيوية SQL أو بيان حالة النظام هي الخيارات للقيام بذلك كما وصفت لك.

ومع ذلك ، بوصفها جانبا ، والنظر في بقية القالب الذي تستخدمه.إذا asp.net 3.5 ثم المدمج في الشبكات linq سوف تفعل كل هذا بالنسبة لك مع القليل جدا من الجهد.حاول تبحث في http://www.asp.net/learn.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top