大家能帮我看一下这个触发器吗?如果我批量插人记录 就会出错
CREATE TRIGGER [Tr_DNFNO] ON [dbo].[DisNoteFit]
FOR INSERT
AS
IF (SELECT DNFNO FROM INSERTED) IS NULL OR (SELECT DNFNO FROM INSERTED) = 0
BEGIN
UPDATE A
SET DNFNO=(SELECT MAX(DNFNO)+1 FROM DisNoteFit
WHERE DNMNum=A.DNMNum AND DNCNum=A.DNCNum AND DNFNum <=A.DNFNum)
FROM DisNoteFit A JOIN INSERTED B on A.DNFNum=B.DNFNum
END
------解决方案--------------------批量插人?把那句判断去掉.然后加为空时,dnfno = 0
CREATE TRIGGER [Tr_DNFNO] ON [dbo].[DisNoteFit]
FOR INSERT
AS
BEGIN
UPDATE A
SET DNFNO=(SELECT isnull(MAX(DNFNO),0)+1 FROM DisNoteFit
WHERE DNMNum=A.DNMNum AND DNCNum=A.DNCNum AND DNFNum <=A.DNFNum)
FROM DisNoteFit A JOIN INSERTED B on A.DNFNum=B.DNFNum
END
------解决方案--------------------这段条件有问题.
WHERE DNMNum=A.DNMNum AND DNCNum=A.DNCNum AND DNFNum <=A.DNFNum)
FROM DisNoteFit A JOIN INSERTED B on A.DNFNum=B.DNFNum
------解决方案--------------------手工每次插入一条记录后检查通过上面的查询能否得到你需要的DNFNO
------解决方案--------------------钻石老大出手,应该没问题了.
------解决方案--------------------CREATE TRIGGER [Tr_DNFNO] ON [dbo].[DisNoteFit]
FOR INSERT
AS
BEGIN
DECLARE @DNFNum INT,@DNCNum INT,@I INT
DECLARE TC CURSOR FOR
SELECT DNFNum,DNCNum FROM INSERTED WHERE DNFNO IS NULL OR DNFNO=0
OPEN TC
FETCH NEXT FROM TC INTO @DNFNum,@DNCNum
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @I=ISNULL(MAX(DNFNO),0) FROM DisNoteFit WHERE DNMNum=@DNMNum AND DNCNum=@DNCNum
UPDATE DisNoteFit SET @I=@I+1,DNFNO=@I WHERE DNMNum=@DNMNum AND DNCNum=@DNCNum
FETCH NEXT FROM TC INTO @DNFNum,@DNCNum
END
CLOSE TC
DEALLOCATE TC
END
GO