ACCESS2003如何获取表的当前自增ID

happySnow_zhe 2013-08-05 10:31:11
如题所示,望指点:不是插入后返回,而是仅仅是获取表当前的自增ID达到了多少?
SQL版的地址:http://bbs.csdn.net/topics/390536202?page=1#post-395212488
但不知道是问题难还是人气少,所以想来这边看看,望解答,然后一起结贴…
...全文
401 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
游北亮 2013-08-08
  • 打赏
  • 举报
回复
单纯从你说的需求,不考虑更好的设计情况下:插入时使用id,后续可能更新为其它值。 那么这个字段完全没必要保存id,插入时直接用null值,后续更新为其它值, 在Select时,如果字段为null则返回id,否则返回该字段值就ok,这样就不用纠结怎么获取当前列id了。 用sql里的case when语句就ok
引用 33 楼 happySnow_zhe 的回复:
呵呵,见笑了,因为那个表里面的数据我是要保存其ID的,但因为某种原因我要确保保存的这个ID就是关联的这条数据,所以我就添加了一个字段,当然这个字段不是说一直都是与自增ID相同,只是其中的一种情况需要,只有在添加的时候才是相同的,所以我这里的提问仅仅只是针对在新添加的时候相同,至于为什么我不想要添加——》查询——》更新这样繁琐的操作,21#回复我解释过了。至于为什么要这样设计我可能解释的不是很清楚,我也不会说闲得蛋疼,给自己找事做,加了这么一个字段。所以还请您就这个问题而言能否指点一下,谢谢…
happySnow_zhe 2013-08-07
  • 打赏
  • 举报
回复
引用 42 楼 beyondzhuzhu 的回复:
锁表 取最大值 可以吗?
不好意思,没理解,能讲详细点么?
beyondzhuzhu 2013-08-07
  • 打赏
  • 举报
回复
锁表 取最大值 可以吗?
happySnow_zhe 2013-08-07
  • 打赏
  • 举报
回复
引用 40 楼 Mic_Gary 的回复:
这贴那么热,借个光,求大侠解决:http://bbs.csdn.net/topics/390540084
都自身难保了…
Mic_Gary 2013-08-07
  • 打赏
  • 举报
回复
这贴那么热,借个光,求大侠解决:http://bbs.csdn.net/topics/390540084
happySnow_zhe 2013-08-07
  • 打赏
  • 举报
回复
引用 38 楼 ktei2008 的回复:
[quote=引用 36 楼 happySnow_zhe 的回复:] [quote=引用 32 楼 ktei2008 的回复:] [quote=引用 27 楼 happySnow_zhe 的回复:] [quote=引用 25 楼 e251396 的回复:] 你可以先插入一条数据,就知道当前插入数据的ID,然后+1就是下一条数据的ID啦。
您好,请看我21#回复!另外,我不可能为了获得到这个自增ID而去往数据库中随便插入一条数据…[/quote]
引用 21 楼 happySnow_zhe 的回复:
[quote=引用 19 楼 zxy397472251 的回复:] 不知道你要这个 表当前自增ID当前达到了多少是干什么? 莫非是怕 插入的ID超过了最大值,如果是这样 你多虑了 以 int举例:-2^31~2^31-1
不是,因为设计的原因,我的那个表中有个字段的指要与自增列的ID相同,因为不知道怎么在插入的时候就将那个刚自增的指就插入到那个字段中去,当然如果所有是先INSERT插入完成后,再SELECT查询出那个刚自增的ID,再UPDATE更新到那个字段中去,这肯定不是我想要的,这样也很麻烦,后来我就想获取到当前表达到的自增ID+1,那么这个值肯定就是与新增的自增ID是一样的了。当然您如果有更好的方法,不妨指点一下。这个是我暂时想到的一种方法…[/quote] 也难怪有人会喷你。你先看看你回帖的态度。。。。回到你的设计,你不觉得很奇葩么?“我的那个表中有个字段的指要与自增列的ID相同”--先纠正错字,不是指,是值。然后,既然有个字段的值要跟ID相同,那你用ID不就行了,又何必多加这完全相同的一列?不知道你是设计宇宙飞船还是设计神舟号,牛逼的设计。[/quote] 您好,对于第一点我的回帖态度?不知道哪楼我语言攻击了? 对于第二点,至于为什么这样设计不在我们这次的讨论范围之类,请就本贴主题讨论! 当然,欢迎吐槽拍砖,但请稍微注意下言辞…[/quote] 程序设计切勿一根筋。你说一下你这么做的目的,自然可以找到更好的解决办法, namely, best practice[/quote] 我开始也想了一些其他的办法,但依旧还是存在些问题,所以我就在表中添加了这么一个字段,我不会无缘无故添加个看似#31所说的"脑残"的字段,问题也随之解决了:不能用MAX(ID)的主要原因上面我也提到过了,因为删除最后面的数据,通过MAX(ID)来判断自增ID肯定是不行的,所以问题就出在了第一条数据上,我开始的做法就是在添加完第一条数据后获取到当前新增的ID更新,那后面的数据就可以通过MAX(ID)+1来添加了。后来我就想能不能更简洁一点,就有了现在讨论的这个主题! 这个问题可以说是数据保存,因为别的表对这个表的ID有引用,而这个表的数据是可以删除还原的,那么由于主键的关系,ID就会发生改变,那么就不能一一对应,所以就添加了那个字段,为了防止ID重复,借住主键自增的关系所以就保证了ID的不重复,可能有人会问,那我为什么不就直接用这个主键就好了,我开始也是这么想的,因为要保证ID对应,所以我就将主键的自增去掉了,原以为没问题了,可后来问题还是来了,由于某些原因(这里就不多说是什么原因了)ID重复,主键冲突,当然不是操作的问题,一部分原因是MAX(ID)上,也是删除最大ID后出现的问题,这样一来还是回到现在讨论的这个主题了。我也想过新建一个表将表中的最大ID记住,那么肯定就不会有重复的了,后来又一想要是这样,还不如新添加一个字段算了,既能保证数据对应又能保证不重复也没不用新建表,何乐而不为呢? 想法已经实现了,如上面所说我想能不能就直接能获取到表中的自增ID达到了多少,不用判断第一条什么的,后面都一样,我不知道能不能获取到,但我感觉应该是有地方保存这些自增ID的,不然系统怎么知道插入到哪条了呢?如果说真不能获取到,那我也只能采用我开始的那种方法了。也不知道我表述的算不算清楚,基本思想就是这样的,如果您有好的提议可以指导一下,当然能解决当前这个问题是最好的,谢谢…
ktei2008 2013-08-07
  • 打赏
  • 举报
回复
引用 36 楼 happySnow_zhe 的回复:
[quote=引用 32 楼 ktei2008 的回复:] [quote=引用 27 楼 happySnow_zhe 的回复:] [quote=引用 25 楼 e251396 的回复:] 你可以先插入一条数据,就知道当前插入数据的ID,然后+1就是下一条数据的ID啦。
您好,请看我21#回复!另外,我不可能为了获得到这个自增ID而去往数据库中随便插入一条数据…[/quote]
引用 21 楼 happySnow_zhe 的回复:
[quote=引用 19 楼 zxy397472251 的回复:] 不知道你要这个 表当前自增ID当前达到了多少是干什么? 莫非是怕 插入的ID超过了最大值,如果是这样 你多虑了 以 int举例:-2^31~2^31-1
不是,因为设计的原因,我的那个表中有个字段的指要与自增列的ID相同,因为不知道怎么在插入的时候就将那个刚自增的指就插入到那个字段中去,当然如果所有是先INSERT插入完成后,再SELECT查询出那个刚自增的ID,再UPDATE更新到那个字段中去,这肯定不是我想要的,这样也很麻烦,后来我就想获取到当前表达到的自增ID+1,那么这个值肯定就是与新增的自增ID是一样的了。当然您如果有更好的方法,不妨指点一下。这个是我暂时想到的一种方法…[/quote] 也难怪有人会喷你。你先看看你回帖的态度。。。。回到你的设计,你不觉得很奇葩么?“我的那个表中有个字段的指要与自增列的ID相同”--先纠正错字,不是指,是值。然后,既然有个字段的值要跟ID相同,那你用ID不就行了,又何必多加这完全相同的一列?不知道你是设计宇宙飞船还是设计神舟号,牛逼的设计。[/quote] 您好,对于第一点我的回帖态度?不知道哪楼我语言攻击了? 对于第二点,至于为什么这样设计不在我们这次的讨论范围之类,请就本贴主题讨论! 当然,欢迎吐槽拍砖,但请稍微注意下言辞…[/quote] 程序设计切勿一根筋。你说一下你这么做的目的,自然可以找到更好的解决办法, namely, best practice
ktei2008 2013-08-07
  • 打赏
  • 举报
回复
引用 39 楼 happySnow_zhe 的回复:
[quote=引用 38 楼 ktei2008 的回复:] [quote=引用 36 楼 happySnow_zhe 的回复:] [quote=引用 32 楼 ktei2008 的回复:] [quote=引用 27 楼 happySnow_zhe 的回复:] [quote=引用 25 楼 e251396 的回复:] 你可以先插入一条数据,就知道当前插入数据的ID,然后+1就是下一条数据的ID啦。
您好,请看我21#回复!另外,我不可能为了获得到这个自增ID而去往数据库中随便插入一条数据…[/quote]
引用 21 楼 happySnow_zhe 的回复:
[quote=引用 19 楼 zxy397472251 的回复:] 不知道你要这个 表当前自增ID当前达到了多少是干什么? 莫非是怕 插入的ID超过了最大值,如果是这样 你多虑了 以 int举例:-2^31~2^31-1
不是,因为设计的原因,我的那个表中有个字段的指要与自增列的ID相同,因为不知道怎么在插入的时候就将那个刚自增的指就插入到那个字段中去,当然如果所有是先INSERT插入完成后,再SELECT查询出那个刚自增的ID,再UPDATE更新到那个字段中去,这肯定不是我想要的,这样也很麻烦,后来我就想获取到当前表达到的自增ID+1,那么这个值肯定就是与新增的自增ID是一样的了。当然您如果有更好的方法,不妨指点一下。这个是我暂时想到的一种方法…[/quote] 也难怪有人会喷你。你先看看你回帖的态度。。。。回到你的设计,你不觉得很奇葩么?“我的那个表中有个字段的指要与自增列的ID相同”--先纠正错字,不是指,是值。然后,既然有个字段的值要跟ID相同,那你用ID不就行了,又何必多加这完全相同的一列?不知道你是设计宇宙飞船还是设计神舟号,牛逼的设计。[/quote] 您好,对于第一点我的回帖态度?不知道哪楼我语言攻击了? 对于第二点,至于为什么这样设计不在我们这次的讨论范围之类,请就本贴主题讨论! 当然,欢迎吐槽拍砖,但请稍微注意下言辞…[/quote] 程序设计切勿一根筋。你说一下你这么做的目的,自然可以找到更好的解决办法, namely, best practice[/quote] 我开始也想了一些其他的办法,但依旧还是存在些问题,所以我就在表中添加了这么一个字段,我不会无缘无故添加个看似#31所说的"脑残"的字段,问题也随之解决了:不能用MAX(ID)的主要原因上面我也提到过了,因为删除最后面的数据,通过MAX(ID)来判断自增ID肯定是不行的,所以问题就出在了第一条数据上,我开始的做法就是在添加完第一条数据后获取到当前新增的ID更新,那后面的数据就可以通过MAX(ID)+1来添加了。后来我就想能不能更简洁一点,就有了现在讨论的这个主题! 这个问题可以说是数据保存,因为别的表对这个表的ID有引用,而这个表的数据是可以删除还原的,那么由于主键的关系,ID就会发生改变,那么就不能一一对应,所以就添加了那个字段,为了防止ID重复,借住主键自增的关系所以就保证了ID的不重复,可能有人会问,那我为什么不就直接用这个主键就好了,我开始也是这么想的,因为要保证ID对应,所以我就将主键的自增去掉了,原以为没问题了,可后来问题还是来了,由于某些原因(这里就不多说是什么原因了)ID重复,主键冲突,当然不是操作的问题,一部分原因是MAX(ID)上,也是删除最大ID后出现的问题,这样一来还是回到现在讨论的这个主题了。我也想过新建一个表将表中的最大ID记住,那么肯定就不会有重复的了,后来又一想要是这样,还不如新添加一个字段算了,既能保证数据对应又能保证不重复也没不用新建表,何乐而不为呢? 想法已经实现了,如上面所说我想能不能就直接能获取到表中的自增ID达到了多少,不用判断第一条什么的,后面都一样,我不知道能不能获取到,但我感觉应该是有地方保存这些自增ID的,不然系统怎么知道插入到哪条了呢?如果说真不能获取到,那我也只能采用我开始的那种方法了。也不知道我表述的算不算清楚,基本思想就是这样的,如果您有好的提议可以指导一下,当然能解决当前这个问题是最好的,谢谢…[/quote] 1. 如果别的表对这个表有引用,那么当这个表的数据被删除还原时,所有引用这个表ID的表都应该同步删除还原,这样才可以保持数据一致性。 2. 如果第一点没问题了,那么ID就无所谓了,直接设置成自增就可以,因为你每次从这个表删除数据的时候,你也应该删除其他表的相关数据。当你还原数据的时候,先还原这张表的数据,然后你就有了ID,再还原其他表的数据(根据新的ID)。 可能我的提议还是无法解决你的问题,但是你要明白一点:如果你使用数据库,就要遵守数据库的一些固有法则;你目前的方法在属于hack。。。。也许能达到你的目的,但是数据库最初并不是被设计来这样使用的。不知道你明白我的意思没。编程有时候是“死板”的,但是这种死板可以让你获得后期更好的维护和拓展
beyondzhuzhu 2013-08-07
  • 打赏
  • 举报
回复
引用 43 楼 happySnow_zhe 的回复:
[quote=引用 42 楼 beyondzhuzhu 的回复:] 锁表 取最大值 可以吗?
不好意思,没理解,能讲详细点么?[/quote] 添加一条记录后,查询最大值。不知道是什么情况用。这个是最笨的办法了。
游北亮 2013-08-06
  • 打赏
  • 举报
回复
汗,你这个设计很蛋疼,同一表居然2个值完全相同的字段,你不觉得这个设计多此一举?
happySnow_zhe 2013-08-06
  • 打赏
  • 举报
回复
引用 25 楼 e251396 的回复:
你可以先插入一条数据,就知道当前插入数据的ID,然后+1就是下一条数据的ID啦。
您好,请看我21#回复!另外,我不可能为了获得到这个自增ID而去往数据库中随便插入一条数据…
happySnow_zhe 2013-08-06
  • 打赏
  • 举报
回复
引用 24 楼 youbl 的回复:
如果没有Insert确实不好获取 不过,你别的表要用的话,就在Insert之后,再插入到别的表就ok啊,为什么一定要先插入别的表再Insert这个自增表呢?
呵呵,您可能没看仔细看我21#的回复,不是别的表,是在同一张表中,一个字段与这张表中的自增ID要保持一致,不是在不同的表…
e251396 2013-08-06
  • 打赏
  • 举报
回复
你可以先插入一条数据,就知道当前插入数据的ID,然后+1就是下一条数据的ID啦。
游北亮 2013-08-06
  • 打赏
  • 举报
回复
如果没有Insert确实不好获取 不过,你别的表要用的话,就在Insert之后,再插入到别的表就ok啊,为什么一定要先插入别的表再Insert这个自增表呢?
happySnow_zhe 2013-08-06
  • 打赏
  • 举报
回复
引用 22 楼 DENQH 的回复:
string sql=" insert into .....; update table set xxxxx=(select @@IDENTITY) where adminid =(select @@IDENTITY) " 直接两个写成一起不就是了么?
嗯,谢谢,您这个思想是对的,在SQL SERVER支持这样的写法,但在ACCESS中好像不支持这样的写法,当然不知道2007是否支持…
happySnow_zhe 2013-08-06
  • 打赏
  • 举报
回复
引用 35 楼 wddw1986 的回复:
[quote=引用 34 楼 happySnow_zhe 的回复:] [quote=引用 31 楼 wddw1986 的回复:] 脑残的设计搞出脑残的需求。 要是想走正常的路线开发软件就请使用正常人的思维来思考问题。
首先请注意您的言辞!到底是不是因为设计的失误原因导致的这个我清楚,对于为什么要这样设计我也不必要解释太多,请见#33楼…[/quote] 有些人可教,而有些人不可教,事情就是这么简单。 不可教的人要么是天才,要么是傻瓜。 打扰了。[/quote] 那谢谢您的指导…
happySnow_zhe 2013-08-06
  • 打赏
  • 举报
回复
引用 32 楼 ktei2008 的回复:
[quote=引用 27 楼 happySnow_zhe 的回复:] [quote=引用 25 楼 e251396 的回复:] 你可以先插入一条数据,就知道当前插入数据的ID,然后+1就是下一条数据的ID啦。
您好,请看我21#回复!另外,我不可能为了获得到这个自增ID而去往数据库中随便插入一条数据…[/quote]
引用 21 楼 happySnow_zhe 的回复:
[quote=引用 19 楼 zxy397472251 的回复:] 不知道你要这个 表当前自增ID当前达到了多少是干什么? 莫非是怕 插入的ID超过了最大值,如果是这样 你多虑了 以 int举例:-2^31~2^31-1
不是,因为设计的原因,我的那个表中有个字段的指要与自增列的ID相同,因为不知道怎么在插入的时候就将那个刚自增的指就插入到那个字段中去,当然如果所有是先INSERT插入完成后,再SELECT查询出那个刚自增的ID,再UPDATE更新到那个字段中去,这肯定不是我想要的,这样也很麻烦,后来我就想获取到当前表达到的自增ID+1,那么这个值肯定就是与新增的自增ID是一样的了。当然您如果有更好的方法,不妨指点一下。这个是我暂时想到的一种方法…[/quote] 也难怪有人会喷你。你先看看你回帖的态度。。。。回到你的设计,你不觉得很奇葩么?“我的那个表中有个字段的指要与自增列的ID相同”--先纠正错字,不是指,是值。然后,既然有个字段的值要跟ID相同,那你用ID不就行了,又何必多加这完全相同的一列?不知道你是设计宇宙飞船还是设计神舟号,牛逼的设计。[/quote] 您好,对于第一点我的回帖态度?不知道哪楼我语言攻击了? 对于第二点,至于为什么这样设计不在我们这次的讨论范围之类,请就本贴主题讨论! 当然,欢迎吐槽拍砖,但请稍微注意下言辞…
cheng2005 2013-08-06
  • 打赏
  • 举报
回复
引用 34 楼 happySnow_zhe 的回复:
[quote=引用 31 楼 wddw1986 的回复:] 脑残的设计搞出脑残的需求。 要是想走正常的路线开发软件就请使用正常人的思维来思考问题。
首先请注意您的言辞!到底是不是因为设计的失误原因导致的这个我清楚,对于为什么要这样设计我也不必要解释太多,请见#33楼…[/quote] 有些人可教,而有些人不可教,事情就是这么简单。 不可教的人要么是天才,要么是傻瓜。 打扰了。
happySnow_zhe 2013-08-06
  • 打赏
  • 举报
回复
引用 31 楼 wddw1986 的回复:
脑残的设计搞出脑残的需求。 要是想走正常的路线开发软件就请使用正常人的思维来思考问题。
首先请注意您的言辞!到底是不是因为设计的失误原因导致的这个我清楚,对于为什么要这样设计我也不必要解释太多,请见#33楼…
happySnow_zhe 2013-08-06
  • 打赏
  • 举报
回复
引用 30 楼 youbl 的回复:
[quote=引用 29 楼 happySnow_zhe 的回复:] [quote=引用 28 楼 youbl 的回复:] 汗,你这个设计很蛋疼,同一表居然2个值完全相同的字段,你不觉得这个设计多此一举?
呵呵,您不知道它的用处,当然觉得是多此一举了…[/quote] 你列举一个例子,说明一下,也让我学习一下这种蛋疼设计的必要性[/quote] 呵呵,见笑了,因为那个表里面的数据我是要保存其ID的,但因为某种原因我要确保保存的这个ID就是关联的这条数据,所以我就添加了一个字段,当然这个字段不是说一直都是与自增ID相同,只是其中的一种情况需要,只有在添加的时候才是相同的,所以我这里的提问仅仅只是针对在新添加的时候相同,至于为什么我不想要添加——》查询——》更新这样繁琐的操作,21#回复我解释过了。至于为什么要这样设计我可能解释的不是很清楚,我也不会说闲得蛋疼,给自己找事做,加了这么一个字段。所以还请您就这个问题而言能否指点一下,谢谢…
加载更多回复(26)

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧