DELETE查询后更新自动编号字段
Update Autonumber field after DELETE query
简介和相关信息:
我有MS ACCESS 2007数据库,我使用ADO和C++编辑该数据库。
问题:
我的问题是主键还表示记录的序号,删除后应该正确更新。主键属于自动编号类型。
下面是我所说的一个例子:
| #PK | Other data ... |
| 1 | ... |
| 2 | ... |
| 3 | ... |
| 4 | ... |
| 5 | ... |
现在,如果我删除第三条记录,我会遇到以下问题:
| #PK | Other data ... |
| 1 | ... |
| 2 | ... |
| 4 | ... |
| 5 | ... |
但我应该得到以下结果:
| #PK | Other data ... |
| 1 | ... |
| 2 | ... |
| 3 | ... | // edited to reflect the change ( previous value was 4 )
| 4 | ... | // edited to reflect the change ( previous value was 5 )
如果我删除最后一条记录,然后插入新的记录,我会得到这样的结果:
| #PK | Other data ... |
| 1 | ... |
| 2 | ... |
| 3 | ... |
| 4 | ... |
| 6 | ... | // this should be 5
问题:
在执行DELETE query
后,是否有办法以编程方式更新自动编号字段?
编辑:
由于我知道这是一种糟糕的做法,我更喜欢添加应该是序数的新字段,这样我的表就可以看起来像这样:
| #PK | Ordinal | Other data ... |
| 1 | 1 | ... |
| 2 | 2 | ... |
| 4 | 3 | ... |
| 5 | 4 | ... |
但我更喜欢它自动更新自己。如果这不可能,我更愿意在执行删除后用SQL query
更新字段
谢谢。
致以最良好的问候。
这是可能的,但不是正确的方式。主键用于关系,因此如果更改值,则需要更新所有相关的表。即使您目前没有任何相关的表,您仍然应该考虑为订单添加一个单独的字段,否则您将来在添加相关表时可能会遇到同样的问题。
编辑回答您的问题:
有没有办法添加另一个表示序号的字段,并在插入新记录后自动递增
如果您将其设置为autonumber,它将自动递增,但您将无法修改它。您可以将其设置成number,当您插入时,您可以使用SELECT MAX(oredinal) + 1 FROM mytable
来递增它。
对于MS Access,请使用
ALter Table Customer alter column CustomerID Counter(1,1)
对于Sql Server
DBCC CHECKIDENT (orders, RESEED, 0)
这将设置下一个ID的值为1,您可以使用上面的命令。
参考URL@http://www.howtogeek.com/howto/database/reset-identity-column-value-in-sql-server/
我决定在表中添加一个新字段,该字段将保存记录的序号。
如果我们假设字段名为OrdinalNumber,那么以下解决方案对我有效:
// when inserting record, I just had to add COUNT( PK ) + 1
INSERT INTO MyTable ( OrdinalNumber , ... ) SELECT COUNT( PK ) + 1 , ...
from MyTable ;
// when deleting, I had to perform following two queries :
DELETE from MyTable where PK = ? ;
// decrement all the successors ordinal number by one
UPDATE MyTable set OrdinalNumber = ( OrdinalNumber - 1 ) where ( PK > ? );
一切似乎都很顺利。我希望有一个更简单的方法。。。
感谢大家的帮助。我对所有答案都投了赞成票。
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- C++内存模型和位字段的最大序列
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- 如何通过UDP接收QByteArray并将其解析为位字段结构?
- 仅匹配集合中的某些字段
- 结构字段名称与 GDB 中的 STL 数组冲突
- 如何使用位字段将数据从二进制文件复制到结构中?
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何避免在数据结构中包含存储为字段的类?
- C程序:通过inode编号获取inode头字段和信息
- DELETE查询后更新自动编号字段