例1 传入一个参数@username,判断用户是否存在
-------------------------------------------------------------------------------
CREATE PROC IsExistUser
(
@username varchar(20),
@IsExistTheUser varchar(25) OUTPUT--输出参数
)
as
SELECT @IsExistTheUser = count(username)
FROM users
WHERE username = @username
GO
例2 存储过程结合事务的一个例子:添加用户,涉及到两个表,一个用户资料表,一个密码表:
增加用户
-------------------------------------------------------------------------------
create procedure AddUser
(
@username varchar(20),--用户名
@passwords varchar(18),--密码
@email varchar(100),--邮箱
@qq varchar(11),--QQ号码
@imageid int--头像
)
as
-- 设置NOCOUNT为ON,使不再返回统计信息(存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。)
SET NOCOUNT ON
DECLARE @CurrentError int
-- 创建事务, 插入数据到2个表
BEGIN TRANSACTION
-- 创建用户信息
INSERT INTO users (username, email, qq, imageid)
VALUES (@username, @email, @qq, @imageid)
select @CurrentError = @@Error
IF @CurrentError != 0
BEGIN
GOTO ERROR_HANDLER
END
-- 创建用户密码
INSERT INTO Signon (username, [password])
VALUES (@username, @passwords)
select @CurrentError = @@Error
IF @CurrentError != 0
BEGIN
GOTO ERROR_HANDLER
END
-- 结束事务
COMMIT TRANSACTION
-- 恢复NOCOUNT设置为OFF
SET NOCOUNT OFF
-- 返回0表示成功,其他则为失败
RETURN 0
-- 错误处理
ERROR_HANDLER:
ROLLBACK TRANSACTION
SET NOCOUNT OFF
RETURN @CurrentError
GO
本文介绍两个SQL存储过程实例,包括检查用户是否存在及结合事务添加用户的完整流程。通过具体代码展示了如何使用输出参数来判断用户存在状态,以及如何利用事务确保在用户表和密码表中同步添加数据的一致性。
150

被折叠的 条评论
为什么被折叠?



