SQL 存储过程实例
由于工作中没有涉及到数据库,好久都没写存储过程啦,有些基本的方法都忘记啦,从今天开始补上。
先来一个实例也就是存储过程的基本写法,在这里只强调实战就不去强调太多的语法和基础知识。
例一 传入一个参数@username,判断用户是否存在
CREATE PROC IsExistUser
(
@ username varchar(20),
@IsExisTheUser varchar(25) OUTPUT --输出参数
)
as
SELECT @IsExisTheUser = count(username)
FROM USERS
WHERE username = @username
GO
例2 存储过程结合事务的例子:添加一个用户,涉及到两个表,一个永固资料表,一个密码表:
增加用户
CREATE PROC 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
-- 创建事务,插入数据到两个表
BEGIN TRANSACTION
--创建用户信息
INSERT INTO user(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)
IF @CurrentError != 0
BEGIN
GOTO ERROR_HANDLER
END
--结束事务
COMMIT TRANSACTION
--恢复 NOCOUNT设置为OF
SET NOCOUNT OFF
--返回0表示成功,其他则为失败
RETURN 0
-- 错误处理
ERROR_HANDLER:
ROLLBACK TRANSACTION
SET NOCOUNT OFF
RETURN @CurrentError
GO