SQL Server返回插入数据的ID和受影响的行数

本文介绍了在SQL Server中获取自增长标识列值的三种方法:@@IDENTITY、IDENT_CURRENT和SCOPE_IDENTITY,以及如何获取标识字段的增量值和种子值。此外还讲解了如何获取受影响的行数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先看看数据库里面的数据(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
 

转载于:https://www.cnblogs.com/Brambling/p/6680706.html

### Python 连接 SQL Server 数据库插入数据后获取返回值 为了实现这一目标,可以使用 `pymssql` 库来连接 SQL Server 并执行相应的操作。以下是详细的说明代码示例。 #### 安装 pymssql 首先需要安装 `pymssql` 库,可以通过 pip 来完成此操作: ```bash pip install pymssql ``` #### 创建数据库连接 要创建与 SQL Server 的连接,需提供必要的服务器参数给 `pymssql.connect()` 方法。这包括主机名、用户名、密码以及数据库名称等信息[^2]。 ```python import pymssql conn = pymssql.connect( server='your_server_name', user='your_username', password='your_password', database='your_database' ) cursor = conn.cursor() ``` #### 执行插入语句并获取返回值 当向表中插入记录时,通常希望获得某些反馈,比如自增 ID 或者影响行数。下面展示了如何做到这一点。这里假设有一个名为 `users` 的表格,并且该表具有自动递增的主键字段 `id`. ```python # 准备插入数据 data_to_insert = ('John Doe', 'johndoe@example.com') # 构建带有 OUTPUT 子句的 INSERT 语句用于捕获返回值 insert_query = """ INSERT INTO users (name, email) OUTPUT INSERTED.id -- 返回插入的那一行的 id 值 VALUES (%s, %s); """ try: cursor.execute(insert_query, data_to_insert) # 提交事务以保存更改 conn.commit() # 获取最后插入ID作为返回值 inserted_id = cursor.fetchone()[0] except Exception as e: print(f"An error occurred while inserting the record: {e}") finally: # 关闭游标连接 cursor.close() conn.close() print(f"The new user was successfully added with an ID of {inserted_id}.") ``` 上述代码片段不仅实现了将一条新的用户记录加入到 `users` 表的操作,还利用了 T-SQL 中的 `OUTPUT` 子句来捕捉刚刚被插入那一行的具体信息,在这里是用户的唯一标识符 `id`。这样就可以确认哪条记录已经被成功添加到了数据库里。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值