感觉没必要用游标,写个插入存储过程就可以解决。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
稍微改了下 楼主可以参考下。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
@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
楼主可以参考下。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
6楼:一次写一张这样肯定没有问题,如果我一次写入多张,哪么写的这几张的CARDIDX值都相同.
SELECT * FROM CSDN WHERE User_Name like 'Lonely_Vane'
--查询结果:
--路过、、、、