emulate mysql border apportionment microsoft sql server 2000
when i worked , attempted summary functionality limit
apportionment upheld mysql, postgresql, sqlite. is, formulating query finished way:
$select = $db->select();
$select->from('mytable');
$select->order('somecolumn');
$select->limit(10, 20);
when database supports limit
, produces an sql query following:
select * mytable method somecolumn border 10, 20
this some-more challenging brands database don't support limit
(that apportionment biased customary sql language, way). beget quarrel numbers, whole query subsequent table, outdoor query between
. fortitude seer ibm db2. microsoft sql server 2005 identical row-number function, query way:
select z2.*
from (
name row_number over(order id) zend_db_rownum, z1.*
( ...original sql query... ) z1
) z2
where z2.zend_db_rownum between @offset+1 @offset+@count;
however, microsoft sql server 2000 doesn't have row_number()
function.
so doubt is, adult proceed heed limit
functionality microsoft sql server 2000, wholly controlling sql? but controlling cursors t-sql stored procedure. support both arguments limit
, both count offset. solutions controlling surrogate list also acceptable.
edit:
the many common fortitude ms sql server 2000 seems below, instance rows 50 by 75:
select tip 25 *
from (
name tip 75 *
list
method by domain asc
)
order domain desc;
however, doesn't work sum outcome set is, contend 60 rows. middle query advantage 60 rows since that's tip 75. following outdoor query advantage rows 35-60, doesn't fit preferred "page" 50-75. basically, fortitude works unless need final "page" outcome set doesn't occur churned page size.
edit:
another fortitude works better, nonetheless wholly assume outcome set includes buttress unique:
select tip n *
from tablename
where pivotal (
name tip x key
tablename
method key
);
conclusion:
no general-purpose fortitude seems exist emulating limit
ms sql server 2000. good fortitude exists row_number()
duty ms sql server 2005.
Comments
Post a Comment