创建表结构
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值
没使用output前的写法,用Score_Identity函数获取自增值
INSERT INTO dbo.test ( name ) VALUES ( N'测试数据') SELECT SCOPE_IDENTITY();
结果如下
使用output获得自增值,请仔细看 output写在 values之前
INSERT INTO dbo.test ( name ) OUTPUT Inserted.id VALUES ( N'测试数据')
输出结果:
返回多个字段,包括默认getdate()函数
INSERT INTO dbo.test ( name ) OUTPUT Inserted.id,Inserted.name,Inserted.createdTime VALUES ( N'测试数据')
输出结果:
用offset fetch实现分页功能
用过mysql的同学对于分页语法特别简单,只需要用limit就可以完成分页。而在SQL SERVER里则需要用子查询完成分页,不过现在SQL SERVER也支持简单的分页,那就是用offset .. fetch来完成,不过要求SQL SERVER版本在2012及更高版本啊。
使用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
输出结果