各位老师,我设计的系统中A表中的djh字段是标识字段,标识增量是1,先通过存储过程向A表中插入一条记录,并带会这条记录产生的djh,然后再向B表中插入若干条带djh的记录,如果有任何一条插入不成功(最常见的是由于操作员的失误向decimal型或money型的字段插入带字母的字符串),就删除A、B表中该djh的记录。
如果我把decimal型和money型的字段都改成varchar型的,那就不会出错了吗?它们还能参加加减乘除的运行吗?
如果我把decimal型和money型的字段都改成varchar型的,那就不会出错了吗?它们还能参加加减乘除的运行吗?
你可以把两条插入写在一个事务里
begin tran
insert into A..
insert into B..
commit
这样当第二条插入出错就回滚第一条
可以加个列,比如状况(status)来体现,而不是删除。
把decimal型和money型的字段都改成varchar型的,那就不会出错了,可是如果不匹配,还是有问题。
调用一次A对应多次B
begin tran
insert into A..//这行应该是存储过程A的内容,对吗?
insert into B..//这里怎么体现存储过程B的多次调用?
commit
SET XACT_ABORT on ;
begin tran...commit tran或
begin try
begin tran...commit tran
end try
begin catch
select ERROR_NUMBER()
rollback tran
end catch
这样的话 只要有错误就会自动回滚
CREATE PROCEDURE [insert_sale]
(@doctorname="" [varchar](50),
@czyname [varchar](50))AS INSERT INTO [yd].[dbo].[sale]
( [doctorname],
[czyname])
VALUES
( @doctorname,
@czyname)
select SCOPE_IDENTITY( ) AS djh
return
GO
放在类型的后面就行了CREATE PROCEDURE [insert_sale]
(@doctorname [varchar](50)='',
@czyname [varchar](50))AS INSERT INTO [yd].[dbo].[sale]
( [doctorname],[czyname])
VALUES
( @doctorname,@czyname)
select SCOPE_IDENTITY( ) AS djh
return
GO