日期:2014-05-18  浏览次数:20544 次

怎么让两张表的ID不重复
有表IP_Dev和IP_ONU,别外一张表IP_VPNUser需要引用这两张表的记录,我引用的是ID号,即IP_VPNUser.UpDevID等于IP_Dev或者IP_ONU的ID,但现在有个问题,IP_Dev和IP_ONU的ID都是自动编号的,它们是重的。有没有办法让他们自动生成的ID不重复。

------解决方案--------------------
没有,为何不用两个字段分别引用。
------解决方案--------------------
ID是怎么生成的,有没通过什么方法生成?有的话可以考虑保存最大ID值,然后新生成ID时两张表都通过这个ID来往上增加
------解决方案--------------------
IP_Dev和IP_ONU 两表非要用同一个列表示,实在是一种错误的设计,此中原因希望楼主能明白

不过各有各的道儿,如果楼主非要那么干也不是不行,你就要在给这两表插入id值时通过一个自定义函数或存储过程来控制使其不能重复,这样简单问题复杂了
------解决方案--------------------
一般A表是通过两个不同列来关联两个不同的表B和C才合情合理
用一个列来关联多个不同的表,以后会遇上更多的不便
------解决方案--------------------
再新建一张表,用这张表来生成ID,只要保证这张表的ID不重复就行了。另两张表就从这张表来取ID,这样就保证这两张表的ID不重复了
------解决方案--------------------
微软生成的编号,无非是 SYSDATETIME(),getdate(),递增,16进制编码随机生成,newid 不行的话你就在这两张表的id前面一个加L, 一个加M 这样他们生成的编号应该就不会在重复了吧..
------解决方案--------------------
我记得这个new_id(),好像可以实现
另外单独做个表记录下主键的更新记录就ok了



------解决方案--------------------
使用GUID吧 

永远不会生成重复的数据,同时也是解决数据库并发操作的首选主键
SQL code

uniqueidentifier

------解决方案--------------------
还有一种办法 和你楼主思路差不多
就是评估一下你这两种表的数据增长速度
可以设置比如 
第一张表的种子1
第二张表的种子50000
如果有第三第四张表
分别可以设置
100000
150000
这种可以用于多张表
------解决方案--------------------
单独做查询需要的话
select 表1 的max(id) +表2 id作为联合查询的id就可以了