怎样将数据同时插入两个表中(事物开始后,插入语句后,自动增长列有没有生成一个值,有的话,值怎样获得)

引发了问题,后来高手解决了这个问题:

create procedure Add_comstomer
@good bit output,
@username varchar(20),
@password varchar(16),
@createtime datetime,
@lastlogintime datetime,
@role varchar(8),
@usersex char(2),
@userage int,
@usermobilephone varchar(12),
@useremail varchar(20),
@userquestion1 varchar(30),
@userquestion2 varchar(30),
@userquestion3 varchar(30),
@IsBuySomeBooks bit,
@HasBoughtBooks varchar(300),
@UserRemark varchar(150)
as
declare @errorSum int,@userID varchar(20);
set @errorSum=0;
begin transaction
insert into userlogin values(@username,@password,@createtime,@lastlogintime,@role)
set @errorSum=@errorSum+@@error;
select @errorsum=userid from userlogin where username=@username and password=@password;
set @errorSum=@errorSum+@@error;
insert into usertable values(@userID,@usersex,@userage,@usermobilephone,@useremail,@userquestion1,@userquestion2,@userquestion3,@IsBuySomeBooks,@HasBoughtBooks,@UserRemark)
set @errorSum=@errorSum+@@error;
if @errorsum <>0
begin
print '出错了'+convert(varchar(8),@errorSum);
set @good=0;
rollback transaction;
end
else
begin
print 'OK';
set @good=1;
commit transaction;
end
go

declare @b bit;
DECLARE @CreateDate DATETIME,@lastlogin datetime;
SET @CreateDate = GETDATE();
SET @lastlogin = GETDATE();

exec Add_comstomer @b output,@username='jack',@password='liudehua',@createtime=@CreateDate,
@lastlogintime=@lastlogin,@role='member',@usersex='男',@userage=47,@usermobilephone='12345678901',
@useremail='chauvet@qq.com',@userquestion1='myself',@userquestion2='myself',@userquestion3='myself',
@IsBuySomeBooks=0,@HasBoughtBooks=null,@UserRemark=null

高手解答:

1)

IDENT_CURRENT
返回为任何会话和任何作用域中的指定表最后生成的标识值。

语法
IDENT_CURRENT(
'table_name')

参数
table_name

是将要返回其标识值的表的名称。table_name 的数据类型为
varchar,没有默认值。

返回类型
sql_variant

注释
IDENT_CURRENT 类似于 Microsoft® SQL Server™
2000 标识函数 SCOPE_IDENTITY@@IDENTITY。这三个函数都返回最后生成的标识值。但是,它们在定义"最后"的作用域和会话上不同。

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。


@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。


SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。

2)declare @ID int

insert into userlogin values(@username,@password,@createtime,@lastlogintime,@role)
set @ID=SCOPE_IDENTITY()--用SCOPE_IDENTITY()是因为考虑到有并发操作的可能
set @userID=cast(@ID as varchar(20))
set @errorSum=@errorSum+@@error
select @errorsum=userid from userlogin where username=@username and password=@password;
set @errorSum=@errorSum+@@error;
insert into usertable values(@userID,@usersex,@userage,@usermobilephone,@useremail,@userquestion1,@userquestion2,@userquestion3,@IsBuySomeBooks,@HasBoughtBooks,@UserRemark)
set @errorSum=@errorSum+@@error;

            
            
IDENT_CURRENT 返回为任何会话和任何作用域中的指定表最后生成的标识值。 语法 IDENT_CURRENT( ' table_name ' ) 参数 table_name 是将要返回其标识值的表的名称。table_name 的数据类型为 varchar ,没有默认值。 返回类型 sql_variant 注释 IDENT_CURRENT 类似于 Microsoft® SQL Server™ 2000 标识函数 SCOPE_IDENTITY @@IDENTITY 。这三个函数都返回最后生成的标识值。但是,它们在定义"最后"的作用域和会话上不同。 IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。 @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。 SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。
 
            
            
IDENT_CURRENT 返回为任何会话和任何作用域中的指定表最后生成的标识值。 语法 IDENT_CURRENT( ' table_name ' ) 参数 table_name 是将要返回其标识值的表的名称。table_name 的数据类型为 varchar ,没有默认值。 返回类型 sql_variant 注释 IDENT_CURRENT 类似于 Microsoft® SQL Server™ 2000 标识函数 SCOPE_IDENTITY @@IDENTITY 。这三个函数都返回最后生成的标识值。但是,它们在定义"最后"的作用域和会话上不同。 IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。 @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。 SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值