我现在有两个表,一个是主表,一个是从表,在插入主表时会自动生成一个ID,这个ID默认值是一个42位的newid(),接下来再插从表时要把这个ID也带进从表OrderID字段里,我实现的办法是在插完主表记录时再找出最后一条记录的ID赋给从表,那么如果在这时正好有一条新的记录进来了,那我岂不就取错ID了?
有没有什么办法或事务来控制这种情况,因为这两个表是靠这个ID字段对应起来的,一旦取错了后果不堪设想。

解决方案 »

  1.   

    select @@IDENTITY   获取返回值你的id不是系统自动的??
      

  2.   

    sql语句这样写 declare @newId int  inser ....;select @newId=@@Identity来获取刚插入的数据的主键ID,这样就不会出现你说的情况了
      

  3.   

    32位吧
    在程序中直接生成ID,C# 是Guid.NewGuid(),然后构造insert语句
      

  4.   

    Guid.NewGUID()  
    一般的系统都是采用INT自增列。
    GUID 一般用在大数据量的处理上
      

  5.   


    我那个ID不是自动的自增列,具体数据格式为如下:
    名称:ID
    长度:42
    默认值或绑定:(newid())
    数据类型:varchar新增一条记录后,ID自动生成格式如下:153C2369-F9B2-4CFD-AB1E-3B23FDF63AB8
      

  6.   

    LZ用的是guid,不是自增的主键;
    sql应该这样写:
    insert .....   //插入数据
    select SCOPE_IDENTITY()  // 返回刚插入的主键,这里不会受到其他插入数据的影响。