標籤:row ber 語句 它的 where 表示 insert 第一個 批處理
首先看看資料庫裡面的資料(S_Id為自增長識別欄位):
sql server 中返回上一次插入資料的ID(標識值)有三種方式:
第一種 @@IDENTITY:
1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height)2 values(‘013‘,‘衛莊‘,‘男‘,‘185‘);3 4 select @@IDENTITY -- 返回 17
@@IDENTITY可以返回當前串連所有範圍插入入最後所產生的標識值(包括任何調用的預存程序和觸發器)。這個函數不只是可以適用於表。函數返回的值是最後表插入行產生的標識值。比如,現在有一個a表和一個b表,a表插入一條資料並觸發 trigger (觸發器)為b表插入一條資料,這時@@IDENTITY返回的其實是b表的識別欄位的值,因為@@IDENTITY它總是擷取最後一條變更資料的自增欄位的值。@@IDENTITY 返回為當前會話的所有範圍中的任何錶最後產生的標識值。
第二種 IDENT_CURRENT:
1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height)2 values(‘014‘,‘大司命‘,‘女‘,‘183‘);3 4 select IDENT_CURRENT(‘Student‘) --返回 18
IDENT_CURRENT()是一個函數,它有一個參數,它的參數就是指定要返回的識別欄位的值的表名。
IDENT_CURRENT()返回為任何會話和任何範圍中的特定表最後產生的標識值, 不受範圍和會話的限制,而受限於指定的表。
第三種 SCOPE_IDENTITY:
1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height)2 values(‘015‘,‘月兒‘,‘女‘,‘165‘);3 4 select SCOPE_IDENTITY() --返回 19
SCOPE_IDENTITY()返回為當前會話和當前範圍中的任何錶最後產生的標識值。一個範圍就是一個模組——預存程序、觸發器、函數或批處理。
IDENT_INCR 用法:
1 -- IDENTITY(1,1) 第一個參數是表示,自增長的起始值,第二個參數表示自增長的增長量,即一次增長多少2 SELECT IDENT_INCR(‘Student‘) -- 返回 1
SELECT IDENT_INCR(‘TableName‘),一個參數,‘TableName‘ 表示指定表的表名或視圖名。
返回指定表的識別欄位的增量值(就是自增值,每插入一條新數值序列增加的數值)。
IDENT_SEED 用法:
1 -- IDENTITY(1,1) 第一個參數是表示,自增長的起始值,第二個參數表示自增長的增長量,即一次增長多少2 select IDENT_SEED(‘Student‘) --返回 1
select IDENT_SEED(‘TableName‘),一個參數,‘TableName‘ 表示指定表的表名或視圖名。
返回指定表的識別欄位的種子值(即起始值,指定識別欄位從哪個數值開始)。
sql 擷取標識遞增的下一個值:
1 --擷取當前標識遞增的下一個值,即當前標識最大的值的下一個值2 select IDENT_CURRENT(‘Student‘) + IDENT_INCR(‘Student‘)
sql 返回受上一語句影響的行數:
@@ROWCOUNT 返回受影響的行數(insert、select、delete、update):
1 select * from Student where S_Sex=‘女‘2 3 select @@ROWCOUNT -- 返回 6
如果行數大於 20 億,請使用 ROWCOUNT_BIG()。
1 select * from Student where S_Sex=‘男‘;2 3 select ROWCOUNT_BIG() --返回 9
rowcount 用法:
rowcount的作用就是用來限定後面的sql在返回指定的行數之後便停止處理,例如下面的樣本:
1 -- 查詢出前 5 條資料 2 set rowcount 53 select * from Student where S_Sex=‘男‘;4 5 -- 查詢出後 5 條資料6 set rowcount 57 select * from Student where S_Sex=‘男‘ order by S_Id desc;
也就是說在查詢上面 rowcount 有著 top [number] 同樣的效果。
要取消set rowcount的限定,只要設定 set rowcount 0 就可以了。
注意:set rowcount的限定對修改,刪除一樣有效。比如下面的樣本:
1 set rowcount 32 update Student set S_BirthDate=‘2017-01-01‘3 where S_Id<204 5 select @@ROWCOUNT --返回 3
1 set rowcount 52 delete from Student where S_BirthDate is null3 4 select @@ROWCOUNT --返回 55 6 set rowcount 07 8 select * from Student
SQL Server返回插入資料的ID和受影響的行數