存储过程中判断用户名是否已经被注册

gongsun 2008-04-09 10:15:12
我是个新手,这个就是写不对,高手指点下。



CREATE PROCEDURE User_Insert

@UserName nvarchar(50),
@UserPwd nvarchar(50),
@UserTypeID int

as

set nocount on

begin transaction

select Count(*) from Users where UserName=@UserName

if Count(*) <> 0

begin rollback

raiserror ('The UserName is been Register.',16,1)

return end

insert into Users (UserName,UserPwd,UserTypeID) values (@UserName,@UserPwd,@UserTypeID)

select @@identity

if @@error <>0

begin rollback

raiserror ('Error insert into User.',16,1)

return end

commit
GO

...全文
176 点赞 收藏 24
写回复
24 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gongsun 2008-04-10
呵呵,还是要谢谢大家了....
回复
-狙击手- 2008-04-09
就一个insert搞什么事务呀,

回复
kakajya 2008-04-09
CREATE PROCEDURE pro_AddUser
(
@UserName varchar(50),
@UserPwd varchar(50),
@UserTypeID int
)
as
set nocount on
if not exists(select 1 from Users_table where UserName=@UserName)
begin transcation
insert into Users_table (UserName,UserPwd,UserTypeID) values (@UserName,@UserPwd,@UserTypeID)

if @@error <>0
raiserror ('Error insert into User.',16,1)
rollback
else
raiserror('Error insert into User.',16,1)
commit
end

GO
回复
-狙击手- 2008-04-09
create table Users(username varchar(10),userpwd varchar(10),usertypeid int)
go

CREATE PROCEDURE User_Insert

@UserName nvarchar(50),
@UserPwd nvarchar(50),
@UserTypeID int

as
set nocount on
if not exists(select 1 from Users where UserName=@UserName)
begin
insert into Users (UserName,UserPwd,UserTypeID) values (@UserName,@UserPwd,@UserTypeID)
--select @@identity
if @@error <>0
raiserror ('Error insert into User.',16,1)
end
else
raiserror('Error insert into User.',16,1)
GO

exec User_Insert 'test','***', 1
/*
(所影响的行数为 1 行)
*/
exec User_Insert 'test','***', 1
/*
服务器: 消息 50000,级别 16,状态 1,过程 User_Insert,行 18
Error insert into User.
*/

select * from users
/*
username userpwd usertypeid
---------- ---------- -----------
test *** 1

(所影响的行数为 1 行)

*/
drop table Users
drop proc User_Insert
回复
-狙击手- 2008-04-09
[Quote=引用 14 楼 gongsun 的回复:]
3楼有阿,你不要生气,有就是有嘛...出错是很正常地阿。
[/Quote]


不是生气呀,是有错就改呀



[Quote=引用 15 楼 fcuandy 的回复:]
引用 13 楼 happyflystone 的回复:
3楼有错误 ???


你两个raiserrror值写成一样了,楼主都指出来了,还说无误? 哈哈.
[/Quote]
为什么不能一样呀

少了一个End吧

create table ta(username varchar(10),userpwd varchar(10),usertypeid int)
go

CREATE PROCEDURE User_Insert

@UserName nvarchar(50),
@UserPwd nvarchar(50),
@UserTypeID int

as
set nocount on
if not exists(select 1 from Users where UserName=@UserName)
begin
insert into Users (UserName,UserPwd,UserTypeID) values (@UserName,@UserPwd,@UserTypeID)
--select @@identity
if @@error <>0
raiserror ('Error insert into User.',16,1)
end
else
raiserror('Error insert into User.',16,1)
GO


drop table ta
drop proc User_Insert
回复
gongsun 2008-04-09
5楼的不止 那个begin出了错...

还有好几处错误...汗。

今晚不行了,看来的等明天上午11点半来电在说了。
回复
gongsun 2008-04-09
改成不样的还是有错啊....
回复
cxmcxm 2008-04-09

CREATE PROCEDURE User_Insert

@UserName nvarchar(50),
@UserPwd nvarchar(50),
@UserTypeID int

as

set nocount on

begin transaction

select Count(*) from Users where UserName=@UserName

if Count(*) <> 0
begin
rollback transaction
raiserror ('The UserName is been Register.',16,1)

return
end
insert into Users (UserName,UserPwd,UserTypeID) values (@UserName,@UserPwd,@UserTypeID)

select @@identity

if @@error <>0
begin
rollback
raiserror ('Error insert into User.',16,1)


return
end

commit
GO
回复
gongsun 2008-04-09
最后一个 raiserror ('Error insert into User.',16,1)
出了错,

提示 ')'附近有错....

晕。
回复
fcuandy 2008-04-09
[Quote=引用 13 楼 happyflystone 的回复:]
3楼有错误 ???
[/Quote]

你两个raiserrror值写成一样了,楼主都指出来了,还说无误? 哈哈.
回复
gongsun 2008-04-09
3楼有阿,你不要生气,有就是有嘛...出错是很正常地阿。
回复
-狙击手- 2008-04-09
3楼有错误 ???
回复
wzy_love_sly 2008-04-09
参考答题思想,不能光看语句
回复
gongsun 2008-04-09
汗...只有4楼没有语法错误....

大侠们忙中都有错啊....
回复
wzy_love_sly 2008-04-09
顶的不算,答题的每人10分,正好
回复
fcuandy 2008-04-09
我5楼的代码已知的手误,请将BEBIN改为BEGIN
回复
gongsun 2008-04-09
都是高手啊...这叫我怎么给分啊...
回复
gongsun 2008-04-09
楼上的哥哥

if @@error <>0
raiserror ('Error insert into User.',16,1) --这个是因为已经被注册的提示吗?
else
raiserror ('Error insert into User.',16,1)
GO


-------------------------也就是可以写?

if @@error <>0
raiserror ('The UserName is been Register.',16,1)
else
raiserror ('Error insert into User.',16,1)
GO




是么?
回复
wzy_love_sly 2008-04-09
[Quote=引用 2 楼 gongsun 的回复:]
大侠们速度啊...11点断电就的到明天了啊。
[/Quote]

哈哈
回复
fcuandy 2008-04-09
随手敲的,可能手误


CREATE PROCEDURE User_Insert
(
@UserName nvarchar(50),
@UserPwd nvarchar(50),
@UserTypeID int
)
AS
BEGIN
SET NOCOUNT ON
IF EXISTS(SELECT 1 FROM Users WHERE UserName=@UserName)
raiserror ('The UserName is been Register.',16,1)
ELSE
BEBIN
BEGIN TRAN
INSERT Users(UserName,UserPwd,UserTypeID) SELECT @UserName,@UserPwd,@UserTypeID

IF @error!=0
BEGIN
ROLLBACK TRAN
raiserror ('Error insert into User.',16,1)
END
ELSE
COMMIT TRAN
SELECT @@identity
END
END
GO
回复
加载更多回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-09 10:15
社区公告
暂无公告