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

来源:互联网 发布:虚拟机安装教程mac 编辑:程序博客网 时间:2024/05/22 06:56
--如何在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 #TDROP 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 tempWHERE RN=7

0 0
原创粉丝点击