ROW_NUMBER() OVER函数的基本用法用法

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。 示例: xlh           row_num 1700              1 1500              2 1085              3 710                4 row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的) 实例: 初始化数据 create table employee (empid int ,deptid int ,salary decimal(10,2)) insert into employee values(1,10,550 […]

存储过程中执行动态Sql语句

MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码。EXEC在某些情况下会更灵活。除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql. 1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处理。以下所讲的都是第二种用法。 下面先使用EXEC演示一个例子,代码1   代码 DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT; SET @TableName = 'Orders'; SET @OrderID = 10251; SET @sql =      ’SELECT * FROM '+QUOTENAME(@TableName) +’WHERE […]

SqlServer2005高效分页sql查询语句汇总

sqlserver2005不支持关键字limit ,所以它的分页sql查询语句将不能用mysql的方式进行,幸好sqlserver2005提供了top,rownumber等关键字,这样就能通过这几个关键字实现分页。 下面是本人在网上查阅到的几种查询脚本的写法: 几种sqlserver2005高效分页sql查询语句 top方案:   sql codeselect top 10 * from table1   where id not in(select top 开始的位置 id from table1) max:    sql codeselect top 10 * from table1    where id>(select max(id)    from (select top 开始位置 id from table1order by id)tt) row: sql codeselect * from (    select row_number()over(order by tempcolumn)temprownumber,*    from (select top 开始位置 […]