Sql Server的两个小技巧

建立表结构 mysql

CREATE TABLE test(
    [id] int IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [name] nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL,
   createdTime DATETIME DEFAULT GETDATE()
) 

使用output得到自增ID值sql

没使用output前的写法,用Score_Identity函数获取自增值函数

INSERT INTO dbo.test ( name ) VALUES ( N'测试数据')
SELECT SCOPE_IDENTITY();

结果以下测试

使用output得到自增值,请仔细看 output写在 values以前fetch

INSERT INTO dbo.test ( name ) OUTPUT Inserted.id
 VALUES ( N'测试数据') 

输出结果:spa

返回多个字段,包括默认getdate()函数code

INSERT INTO dbo.test ( name ) OUTPUT Inserted.id,Inserted.name,Inserted.createdTime
 VALUES ( N'测试数据') 

输出结果:blog

 

用offset fetch实现分页功能ip

用过mysql的同窗对于分页语法特别简单,只须要用limit就能够完成分页。而在SQL SERVER里则须要用子查询完成分页,不过如今SQL SERVER也支持简单的分页,那就是用offset .. fetch来完成,不过要求SQL SERVER版本在2012及更高版本啊。get

使用Row_Number分页语法以下:

 SELECT * FROM (SELECT *,ROW_NUMBER () OVER (ORDER BY id)  AS rn FROM
 dbo.test)  AS t
 WHERE rn BETWEEN 11 AND 20

输出结果

使用offset分页,相似于linq里的skip + take函数。

 

基本语法,offset 跳过的行数 rows Fetch Next 抓取的行数 rows only

SELECT * FROM dbo.test ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY

输出结果

相关文章
相关标签/搜索