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

輸出結果

相關文章
相關標籤/搜索