Cannot insert duplicate key in object 'pandian'.
主键重复了。就是pandian中已经存在了一个cardid,与你要插入的新记录的cardid相同。
LZ看看你的dbo.getcardid()的函数吧,是不是会生成2个一样的值出来。

解决方案 »

  1.   

    cardid是主键,不能重复 ,cardid  是自增列么?
      

  2.   

    CREATE function getcardid()    
    returns char(8)    
    as    
    begin    
    declare @cardid char(8)    
    select @cardid='06000001'    
        
    if not exists(select * from pandian)    
       return @cardid    
      else    
     select @cardid=max(cardid) from pandian     
     select @cardid='06'+right(cast(1000000+convert(int,substring(@cardid,3,6))+1 as varchar),6)  
     return @cardid    
    end    
      
      

  3.   

    constraint PK_pandian_cardid primary key (cardid)~~~就是这个限止
      

  4.   

    CREATE function getcardid()    
    returns char(8)    
    as    
    begin    
    declare @cardid char(8)    
    select @cardid='06000001'    
        
    if not exists(select * from pandian)    
       return @cardid    
      else    
     select @cardid=max(cardid) from pandian     
     select @cardid='06'+right(cast(1000000+convert(int,substring(@cardid,3,6))+1 as varchar),6)  
     return @cardid    
    end    
      會生成兩個一樣的值嗎?不可能吧
      

  5.   

    下列SQL語句執行出錯
    insert into pandian(pandiandate,matplace,matid,matname,mattype,        
    matstatus,quantity1) 
    select getdate() as pandiandate ,m.matplace,m.id,m.matname,m.mattype,        
    m.matstatus,m.quantity  from material m 有人可能會說出錯原因是產生了相同的cardid,
    可是當查詢時pandian表中沒有一條記錄。而
    insert into pandian(pandiandate,matplace,matid,matname,mattype,        
    matstatus,quantity1) 
    values(getdate(),'a','a','a','a','a',100) 
    則執行的良好,產生的cardid是連續的,06000001,06000002,.......06000009,...06000101....
      

  6.   

    insert into pandian(cardid,pandiandate,matplace,matid,matname,mattype,        
    matstatus,quantity1) 
    select dbo.getcardid(),getdate() as pandiandate ,m.matplace,m.id,m.matname,m.mattype,        
    m.matstatus,m.quantity  from material m
      

  7.   

    proglovercn(冰雪) 
    insert into pandian(cardid,pandiandate,matplace,matid,matname,mattype,        
    matstatus,quantity1) 
    select dbo.getcardid(),getdate() as pandiandate ,m.matplace,m.id,m.matname,m.mattype,        
    m.matstatus,m.quantity  from material m
    執行也出錯,出錯信息一模一樣