【发布时间】:2013-05-29 06:00:54
【问题描述】:
我想为登录表写存储过程。
此过程涉及检查LogInID是否已经存在,如果存在则不允许插入具有相同LogInID的记录。
我的程序如下:
ALTER PROCEDURE logTRAN
@id varchar(25),
@pass varchar(25)
AS
BEGIN TRANSACTION
insert into login values(@id,@pass)
IF EXISTS (select count(*) from login where LogInID=@id)
BEGIN
PRINT 'USER ALREADY EXISTS'
ROLLBACK
END
ELSE
BEGIN
COMMIT TRANSACTION
END
我执行如下:
exec logTRAN '0L036','aaa' //这是LogInID为'0L036'的重复记录
但是记录被插入,结果如下:
(1 row(s) affected)
USER ALREADY EXISTS
Msg 266, Level 16, State 2, Procedure logTRAN, Line 0
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 2, current count = 0.
我的存储过程中可能有什么错误?
请指导我。
【问题讨论】:
-
您应该在插入语句中命名您的列。执行插入后用户将始终存在,因此始终会失败。
EXISTS中不应包含COUNT。要么返回计数并进行检查,要么使用*作为您的列列表。 -
我可能弄错了,但你应该在
AS之后有一个BEGIN,并以END结束你的过程 -
@RobertMcKee 不,不一定。但第一条评论成功了。
标签: sql sql-server-2005 stored-procedures