插入数据时,如何让表的fid不重复,乃至报错。
-1.把表A的数据插入到表B中
select identity(int,100,1) as Fid,FQty into #TabelB from TableA
--2.把表B的数据插入到表C中(表C的fid为唯一索引)
insert C(fid,fqty) select fid,fqty from #TableB
--3.删除表B
drop table #TabelB
--4.下次再将A的数据插入B,
--B的数据插入C的时候,报错。因为C的fid不允许重复。
请问如何才能让fid不重复?非常感谢!
--补充
--我能取到表C的最大的fid,但是identity()不支持临时变量
declare @fid int
select @fid=FMaxNum+1 from icmaxnum where FTableName='C'
print @fid
[解决办法]
--办法一,直接插入,也用不着变量
select identity(int,100,1) as Fid,FQty into #TabelB from TableA
insert C(fid,fqty) select fid + (select FMaxNum+1 from icmaxnum where FTableName='C'),fqty from #TableB
--办法二,间接插入
select identity(int,100,1) as Fid,FQty into #TabelB from TableA
UPDATE #TableB SET fid = (select @fid=FMaxNum+1 from icmaxnum where FTableName='C') + fid
insert C(fid,fqty) select fid,fqty from #TableB
--办法三,用RowNumber时根本不用再用#TableB表来中转
[解决办法]
用row_number() 控制好排序,插入的时候把不存在的插入即可。
例如表A中有100条,插入表C中100条。
表A中变成了200条,插入表C中的时候,只插入101到200即可。重复的就不用再插入了。
[解决办法]
首先要从业务上去分析,如果业务本来不允许重复,那证明你的程序从一开始就有问题,不要先考虑如何避免重复,而是要考虑为什么会重复,这种重复正不正常
[解决办法]
建立C时,把fid设为自增长字段.
insert C(fqty) select fqty from TableA
[解决办法]
A表为动态的,你没有唯一约束或者主键么?