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

    xiaoxiao2025-11-09  8

    --如何在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
    转载请注明原文地址: https://ju.6miu.com/read-1303995.html
    最新回复(0)