zoukankan      html  css  js  c++  java
  • SQL Server返回插入数据的ID和受影响的行数

    首先看看数据库里面的数据(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 5
    3 select * from Student where S_Sex='男';
    4 
    5 -- 查询出后 5 条数据
    6 set rowcount 5
    7 select * from Student where S_Sex='男' order by S_Id desc;
    复制代码

    也就是说在查询上面 rowcount 有着 top [number] 同样的效果。

    要取消set rowcount的限定,只要设置 set rowcount 0 就可以了。

    注意:set rowcount的限定对修改,删除一样有效。比如下面的示例:

    1 set rowcount 3
    2 update Student set S_BirthDate='2017-01-01'
    3 where S_Id<20
    4 
    5 select @@ROWCOUNT    --返回 3 
    复制代码
    1 set rowcount 5
    2 delete from Student where S_BirthDate is null
    3 
    4 select @@ROWCOUNT    --返回 5
    5 
    6 set rowcount 0
    7 
    8 select * from Student
    复制代码
  • 相关阅读:
    仓位控制
    全排列
    [手游新项目历程]-54-c,MySQL如何复制表中的一条记录并插入
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9818742.html
Copyright © 2011-2022 走看看