SET XACT_ABORT ON
insert tb1 value(..)
insert tb2 value(@@identity, ...)
SET XACT_ABORT OFF
insert tb1 value(..)
insert tb2 value(@@identity, ...)
SET XACT_ABORT OFF
解决方案 »
- 小游戏比赛数据库的设计
- 如果让不重复的字段显示,sql语句如何写,非常紧急,请教各位,多谢了!
- 行转列求助
- 怎样更改SQL 2005中数据库的表的创建日期??
- MSsql数据库用户权限 db_owner
- 把默认数据库脱机了,结果登不上去了怎么办!
- win7、win8 连接win2003上的sqlserver2005 速度超慢,xp访问正常
- 大家讨论一下SQL SERVER 2000 要导出数据的话,导出为什么类型的数据安全性要好一些?
- 请教!!!
- 请看ADO+MTS SERVER+SQL SERVER 的C/S程序的错误?(
- 一个简单的SQL语句,问过几遍了没有答案
- 如何取得记录集中某一段数据,一旦通过,立即给分!!!
---建立测试环境:create table tb1(userid int identity,name1 varchar(8),tel bigint)
create table tb2 (userid int ,name1 varchar(8),tel bigint)--创建存储过程
create proc ins
@name1 varchar(8),
@tel bigint
as
insert tb1 values(@name1,@tel)
--select @@ident_current('tb1')
insert tb2(userid)
select (select top 1 userid from tb1 order by userid desc)--执行存储过程
exec ins '王红1',15564555
--也可以这样做
create proc ins
@name1 varchar(8),
@tel bigint
as
insert tb1 values(@name1,@tel)
insert tb2(userid)
select (select ident_current('tb1'))
ident_current('tb1'):ident_current('tablename')是个系统函数,
其作用是将表中有标识列值的最后一次产生的标识值得到
on tb1
for insert
as
insert tb2(userid) select userid from inserted
if @@error<>0
rollback tran
go
这个是什么意思 写错了吧
(不是,除非你加一事物控制,才會一起執行)
所謂事物控制不一定是 begin tran ....comit ...
假如你同時選中幾個語句---》事物樓主就是這種情況
insert tb2 value(@@scope_identity, ...)
select @userid=userid from tb1 ----這裡得到的@userid必須是唯一(
---比如 select @userid=max(id) from tb1
insert tb2 value(@userid,....) ---此句必須判定 tb2的userid不能為identity
返回最后插入的标识值。--------------------
select @@identity 就是你刚刚插入tb1中中刚生成的usrid的值,虽然@@identity 有些限制,但是已经满足你上面的要求了
GO
SET ANSI_NULLS ON
GO
create PROCEDURE dbo.proc_abc
AS set nocount on BEGIN TRANSACTION
insert tb1 value(..)
select @userid=userid from tb1 ..... if @@error<>0
begin
ROLLBACK TRANSACTION
select -200,'insert error 1'
return
end
insert tb2 value(@userid,....) if @@error <>0
begin rollback tran
select -300,'insert error 2'
return
end
COMMIT TRANSACTION
select 999, '操作表成功'
return
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO