各位老师,我设计的系统中A表中的djh字段是标识字段,标识增量是1,先通过存储过程向A表中插入一条记录,并带会这条记录产生的djh,然后再向B表中插入若干条带djh的记录,如果有任何一条插入不成功(最常见的是由于操作员的失误向decimal型或money型的字段插入带字母的字符串),就删除A、B表中该djh的记录。
如果我把decimal型和money型的字段都改成varchar型的,那就不会出错了吗?它们还能参加加减乘除的运行吗?

解决方案 »

  1.   

    字段还是应该设置成数值型的,计算方便
    你可以把两条插入写在一个事务里
    begin tran
      insert into A..
      insert into B..
    commit
    这样当第二条插入出错就回滚第一条
      

  2.   

    通常商业上,不建议这样做。
    可以加个列,比如状况(status)来体现,而不是删除。
    把decimal型和money型的字段都改成varchar型的,那就不会出错了,可是如果不匹配,还是有问题。
      

  3.   

    先学习下:两条存储过程:A和B
    调用一次A对应多次B
    begin tran
      insert into A..//这行应该是存储过程A的内容,对吗?
      insert into B..//这里怎么体现存储过程B的多次调用?
    commit
      

  4.   

    封裝在一個事務里就行了
    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
      

  5.   

    写在一个事务里面 前面加SET XACT_ABORT on
    这样的话 只要有错误就会自动回滚
      

  6.   

    怎样给存储过程的参数设默认值啊,是这样吗?
    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
      

  7.   


    放在类型的后面就行了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
      

  8.   

    这个status的列如果我设置成bit型数据,默认值是0,怎样在插入不成功时将该单据号对应的两个表中的bit值改成1