如何在SQL Server实现类似RowNum伪列

--如何在SQL Server实现类似RowNum伪列
--说明:Oracle中RowNum伪列一般按照表中数据的插入顺序排列,是查询时默认的数据输出排序方式
--建立测试样表
USE TSQL2012;
IF OBJECT_ID('dbo.Test', 'U') IS NOT NULL DROP TABLE dbo.Test;

CREATE TABLE dbo.Test(Name varchar(100));
INSERT INTO dbo.Test values
('Chris'),
('Nancy'),
('Alvin'),
('Sherman'),
('Erick'),
('Josie'),
('Sonia'),
('Joanna');

--法1,传统方法,即建立临时表,通过插入顺序确定RowNum伪列
select RowNum=IDENTITY(INT,1,1),Name into #T from dbo.Test 
select * from #T
DROP TABLE #T;

--法2,窗口函数法,ROW_NUMBER() OVER() 函数中ORDER BY子句若不指定排序字段,则会产生按照原始插入顺序排列的RowNum伪列
--注意SQL Server在某些情况下,比如 "SELECT TOP 100 ColumnName FROM TABLENAME;"可能按照升序排列
--注意"SELECT 1"和"SELECT NULL"
--ROW_NUMBER()函数在语法上需要ORDER BY子句,所有在使用ROW_NUMBER()函数的时候必须包含这一子句。SELECT NULL是一个在未指定排序字段时的语法上的占位符。
--(接上句)在一些情况下我们不需要强制使用任意字段排序,此时最快得选项是使用SELECT NULL(或者使用SELECT 1、SELECT 2等)。查询优化器能识别这种方式,所以不会产生性能开销。
SELECT * FROM dbo.Test;
SELECT Name,RN=ROW_NUMBER() OVER(ORDER BY (SELECT 1))
FROM dbo.Test;
SELECT Name,RN=ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) FROM dbo.Test;

with temp as (
SELECT Name,RN=ROW_NUMBER() OVER(ORDER BY (SELECT NULL))
FROM dbo.Test)
SELECT Name from temp
WHERE RN=7

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值