多表插入问题,如何同时生成两个客户号(同一client表流水号)//生成客户id
//函数是通过select max(clientid) +1  from client 实现的
// select max(clientid) +2  from client 实现的
//问题是同时获取两个客户号同重复,不知道有什么好的办法解决?
相关的代码如下 :
string  x= clientid();
strign y =clientid();
try
{
 con.BeginTransaction();
///投保客户
com.CommandText = "insert into gy_client(clientid)values(x)...."
 com.ExecuteNonQuery();
///被保客户
com.CommandText = "insert into gy_client(clientid)values(y)...."
 com.ExecuteNonQuery();st.Commit();

cacthc{ ....   }

解决方案 »

  1.   

    通常單機可用Identity標識列,其它用GUID為主健
      

  2.   

    insert into gy_client(clientid) select * from max(clientid) +1 from client insert into gy_client(clientid) select * from max(clientid) +2 from client 
      

  3.   

    這里舉個例子CREATE TABLE T(ID INT IDENTITY,NAME NVARCHAR(50))GO
    CREATE PROCEDURE cT(
    @Name NVARCHAR(50),
    @ID INT OUTPUT
    )
    SET XACT_ABORT ON;
    BEGIN TRAN
    DECLARE @ID int
    INSERT T SELECT @Name
    SET @ID=SCOPE_IDENTITY()
    COMMIT TRAN
    goDECLARE @ID INT
    SET cT @Name='X',@ID=@ID output
      

  4.   

    还有另外的一个方法:按当前系统时间生成客户号 datetim.now.(yyyyMMddHHmmSSfff)同时生成两个不重复的客户号.因为多用户同时操作不知道可行吗??请大家给点意见!
      

  5.   

    用 new_id() 好控制一些
      

  6.   

    没明白楼上的意思。newd()
    select max(clientid)+1 from gy_client
    select max(clientid)+2 from gy_client
    是这样吗?
      

  7.   

    是newid() char(32) 位的 
    这样可以避免产生重复的id
      

  8.   

    和 oracle 里面的sys_guid() 类似
      

  9.   

    8-9楼朋友的意见不错!遗憾的我的数据库是ms sql 2k!
      

  10.   


    不好意思!,ms sql2000确实有! 请给段具体用法的代码呗!
      

  11.   

    还是有问题。clientid经常要用到 查询相关信息,利用newid()生成的东东,太长了,又没有规则,使用太不方便了吧!