### SQL Server 存储过程添加一条记录并返回新添加记录的ID号 在数据库管理系统(DBMS)中,存储过程是一种预编译的SQL代码集合,它可以被当作一个单独的对象来调用,并执行一系列复杂的数据库操作。存储过程不仅可以提高应用程序的性能,还能增强数据的安全性和完整性。本文将详细介绍如何在SQL Server中创建一个存储过程来添加一条记录,并返回这条记录的自动生成ID。 #### 一、创建存储过程 给定的存储过程名为`spAddadmin`,用于向`admin_info`表中插入一条新的管理员记录,并返回该记录的自动生成ID。下面是具体的步骤: 1. **定义存储过程**:我们需要定义存储过程的基本结构,包括输入参数和输出参数。 ```sql CREATE PROCEDURE [dbo].[spAddadmin] -- Add the parameters for the stored procedure here @adminID INT OUTPUT, @adminName VARCHAR(64), @adminUsernum VARCHAR(64), @adminPwd VARCHAR(64), @adminRole int, @adminRelName VARCHAR(50), @adminMoble VARCHAR(50), @adminTel VARCHAR(50), @adminState int ``` 2. **开始事务**:为了确保数据的一致性和安全性,在进行任何数据库操作之前,最好使用事务管理。 ```sql AS BEGIN TRANSACTION ``` 3. **处理逻辑**: - 如果`@adminID`不为0,则将其设置为-1。这通常意味着在尝试更新现有记录而不是插入新记录时的错误处理。 ```sql IF @adminID != 0 BEGIN SET @adminID = -1 END ``` - 否则,执行插入操作,并获取新插入记录的ID。 ```sql ELSE BEGIN /*SET IDENTITY_INSERT scl_Admin_Information ON*/ -- 这一行是注释,用于提醒开发人员如果需要可以开启标识插入功能 INSERT INTO admin_info (admin_username, admin_usernum, admin_userpasd, admin_Role, admin_RelName, admin_Moble, admin_Tel, admin_state) VALUES (@adminName, @adminUsernum, @adminPwd, @adminRole, @adminRelName, @adminMoble, @adminTel, @adminState) SET @adminID = @@IDENTITY END ``` 4. **提交事务**:如果一切顺利,提交事务。 ```sql COMMIT TRANSACTION ``` 5. **异常处理**:如果过程中发生错误,回滚事务,并将`@adminID`设置为-3表示错误状态。 ```sql IF @@ERROR != 0 BEGIN SET @adminID = -3 ROLLBACK TRANSACTION END ``` #### 二、关键知识点解析 1. **参数类型**: - **输出参数**:`@adminID INT OUTPUT`,用于返回新插入记录的ID。 - **输入参数**:`@adminName VARCHAR(64)`, `@adminUsernum VARCHAR(64)`, `@adminPwd VARCHAR(64)`, `@adminRole int`, `@adminRelName VARCHAR(50)`, `@adminMoble VARCHAR(50)`, `@adminTel VARCHAR(50)`, `@adminState int`,分别代表管理员名称、用户名、密码等信息。 2. **事务管理**: - 使用`BEGIN TRANSACTION`和`COMMIT TRANSACTION`来开始和结束一个事务,保证了数据的一致性。 - 异常处理通过`IF @@ERROR != 0`实现,确保在出现错误时能够及时回滚事务。 3. **插入记录与返回ID**: - 使用`INSERT INTO...VALUES(...)`语句插入新记录。 - 通过`SET @adminID = @@IDENTITY`获取并返回新插入记录的ID。`@@IDENTITY`是一个系统变量,用于返回最近一次自动增长字段的值。 4. **注释**: - 注释部分`/*SET IDENTITY_INSERT scl_Admin_Information ON*/`提供了如何开启标识插入功能的信息。默认情况下,SQL Server不允许直接指定标识列的值,但有时可能需要这样做。这可以通过在插入前使用`SET IDENTITY_INSERT table_name ON`命令来实现,之后再用`SET IDENTITY_INSERT table_name OFF`关闭。 通过上述步骤和关键知识点的介绍,我们不仅了解了如何在SQL Server中创建存储过程来完成特定任务,还掌握了如何有效地管理和控制事务,确保数据的完整性和一致性。这对于任何涉及复杂数据库操作的应用程序来说都是非常重要的。
CREATE PROCEDURE [dbo].[spAddadmin]
-- Add the parameters for the stored procedure here
@adminID INT OUTPUT,
@adminName VARCHAR(64),
@adminUsernum VARCHAR(64),
@adminPwd VARCHAR(64),
@adminRole int,
@adminRelName VARCHAR(50),
@adminMoble VARCHAR(50),
@adminTel VARCHAR(50),
@adminState int
AS
BEGIN TRANSACTION
IF @adminID != 0
BEGIN
SET @adminID = -1
END
ELSE
BEGIN
/*SET IDENTITY_INSERT scl_Admin_Information ON*/
INSERT INTO admin_info
(admin_username,admin_usernum,admin_userpasd,admin_Role,admin_RelName,admin_Moble,admin_Tel,admin_state)
VALUES(@adminName,@adminUsernum,@adminPwd,@adminRole,@adminRelName,@adminMoble,@adminTel,@adminState)
SET @adminID = @@IDENTITY
END
COMMIT TRANSACTION
IF @@ERROR!=0
BEGIN
- xianmuou2013-03-20很一般!不值得
- 杰_杰2013-10-31添加一条记录并返回新添加记录的ID号。
- 粉丝: 2
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C语言的系统服务框架.zip
- (源码)基于Spring MVC和MyBatis的选课管理系统.zip
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip