首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于sqlserver中ROW_NUMBER()中OVER里Order By字段的有关问题

2012-06-14 
关于sqlserver中ROW_NUMBER()中OVER里Order By字段的问题如果用ROW_NUMBER() OVER (ORDER BY Column ASC)

关于sqlserver中ROW_NUMBER()中OVER里Order By字段的问题
如果用ROW_NUMBER() OVER (ORDER BY Column ASC)会产生这样一个怪问题,
那就是当Column有重复数据时,同一条sql语句每次查询出来的数据会不一样,比如Column是date类型,我有一万条数据的这个字段的值是2012-05-30,那么我查询其中10条数据时,每次执行结果都不一样,这个问题应该怎么解决,并且对性能影响不大。

SQL code
;WITH ViewList ( [row], PartNumber, SerialNumber,EndUserName,PurchaseDate,DealerName,EndUserProvince,EndUserCity,EndUserAddress,LotNumber,DeliveryDate,ReceiptDate) AS (SELECT ROW_NUMBER() OVER (ORDER BY  ReceiptDate ASC) [row],PartNumber, SerialNumber,EndUserName,PurchaseDate,DealerName,EndUserProvince,EndUserCity,EndUserAddress,LotNumber,DeliveryDate,ReceiptDate FROM [dbo].[ScannerWarranty]) SELECT [row], PartNumber, SerialNumber,EndUserName,PurchaseDate,DealerName,EndUserProvince,EndUserCity,EndUserAddress,LotNumber,DeliveryDate,ReceiptDate FROM ViewList WHERE [row] BETWEEN  91 AND 100


每次执行结果都不一样,蛋疼了……

[解决办法]
那就这样 ROW_NUMBER() OVER(ORDER BY GETDATE()) RN
[解决办法]
SQL code
;WITH ViewList ( [row], PartNumber, SerialNumber,EndUserName,PurchaseDate,DealerName,EndUserProvince,EndUserCity,EndUserAddress,LotNumber,DeliveryDate,ReceiptDate) AS (SELECT ROW_NUMBER() OVER (ORDER BY  GETDATE() ) [row],PartNumber, SerialNumber,EndUserName,PurchaseDate,DealerName,EndUserProvince,EndUserCity,EndUserAddress,LotNumber,DeliveryDate,ReceiptDate FROM [dbo].[ScannerWarranty]) SELECT [row], PartNumber, SerialNumber,EndUserName,PurchaseDate,DealerName,EndUserProvince,EndUserCity,EndUserAddress,LotNumber,DeliveryDate,ReceiptDate FROM ViewList WHERE [row] BETWEEN  91 AND 100
[解决办法]
SQL code
ORDER BY  ReceiptDate,GETDATE()
[解决办法]
探讨
楼上的几位,先谢了,可是我是点击某一个列就按这个列排序的,如果加个Getdate(),那不是会影响查询速度

热点排行