insert into DcuCardLib 
select '设备编号','设备的卡号',isnull(max('此卡在此设备中的位置'),0)+1 from DcuCardLib where DcuID ='设备编号'

解决方案 »

  1.   

    感觉没必要用游标,写个插入存储过程就可以解决。create proc InsertCardIdx
      @DcuID int 
      @CardNo int 
    as
      begin 
        declare @CardIdx int
        if exists(select 1 from DcuCardLib Where DcuID=@DcuID and CardNo = @CardNo)
           select @CardIdx = max(CardIdx) from DcuCardLib Where DcuID=@DcuID and CardNo = @CardNo
        else
           set @CardIdx = 1
        insert into DcuCardLib(DcuID,CardNo,CardIdx) values(@DcuID,@CardNo,@CardIdx)
      end
      

  2.   

    稍微改了下
    楼主可以参考下。CREATE  TRIGGER UpdateCardIdx ON dbo.DcuCardLib 
    FOR INSERT 
    AS 
    DECLARE @InsertedCnt int Select @InsertedCnt = Count(*) From Inserted if @InsertedCnt > 0 
    BEGIN 
          --这里可以不用游标,游标效率不高
          UPDATE DcuCardLib
          SET CardIdx = LO.MAXCardIdx 
          FROM DcuCardLib T, INSERTED I,
              (SELECT S.DCUID,ISNULL(MAX(S.CardIdx),0) + 1 AS MAXCardIdx  
               FROM DcuCardLib S WHERE S.DCUID = I.DCUID) LO    
          Where  T.DcuID= I.DcuID And  T.CardNo=I.CardNo  AND LO.DCUID = T.DCUID  
    END 
      

  3.   

    5楼:我要实现的目的是 让触发器自动维护.
    6楼:一次写一张这样肯定没有问题,如果我一次写入多张,哪么写的这几张的CARDIDX值都相同.
      

  4.   


              SELECT * FROM CSDN WHERE User_Name like 'Lonely_Vane'
              --查询结果:
              --路过、、、、