SQL存储过程实例

例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

posted @ 2013-03-27 16:10  RichZhang  阅读(132)  评论(0编辑  收藏  举报