哪位大侠告诉小弟我,到底这个存储过程该如何改啊

哪位大侠告诉我,到底这个存储过程该怎么改啊!!!
小弟写了个存储过程,
可执行的时候总是报错,
哪位大侠仁慈一下,帮忙给改一下啊.
谢谢了啊!!!!


create   proc   useradd
(
@user_name   varchar(20),
@user_pwd   varchar(20),
@object_id   varchar(8),
@user_power   char(1)
)as
(   declare   @@uid   int  
set   @uid=0
SELECT   TOP   1   @uid=user_id
                FROM   tcm_user
order   by   user_id   desc
@uid=@uid+1
select   user_id   from   tcm_user  
insert   tcm_user
(user_name,user_pwd,object_id,user_power)
values
(@user_name,@user_pwd,@object_id+str(@uid),@user_power)
)

------解决方案--------------------
try

create proc useradd
(
@user_name varchar(20),
@user_pwd varchar(20),
@object_id varchar(8),
@user_power char(1)
)as
(
insert tcm_user
([user_name],user_pwd,[object_id],user_power)
select TOP 1
@user_name,@user_pwd,@object_id+Rtrim([user_id] + 1), @user_power
FROM tcm_user
order by user_id desc
)
------解决方案--------------------
create proc useradd
(
@user_name varchar(20),
@user_pwd varchar(20),
@object_id varchar(8),
@user_power char(1)
)as
( declare @uid int
set @uid=0
SELECT TOP 1 @uid=user_id
FROM tcm_user
order by user_id desc
SET @uid=@uid+1
select user_id from tcm_user
insert tcm_user
(user_name,user_pwd,object_id,user_power)
values
(@user_name,@user_pwd,@object_id+str(@uid),@user_power)
)

------解决方案--------------------
alter proc useradd
@user_name varchar(20),
@user_pwd varchar(20),
@object_id varchar(8),
@user_power char(1)
as
declare @uid int
set @uid=0
SELECT TOP 1 @uid=user_id FROM tcm_user order by user_id desc

set @uid=@uid+1

select user_id from tcm_user

insert tcm_user
(user_id , user_name , user_pwd , object_id , user_power)
values
(@uid , @user_name , @user_pwd , @object_id + str(@uid) , @user_power)

另外,@object_id + str(@uid),会造成“将截断字符串或二进制数据。语句已终止。”的错误,是你object_id字段太小的原因