MS-Access:用于更新表中列的SQL

时间:2010-03-12 08:33:11

标签: ms-access

我在访问数据库中有以下表格

id  VisitNo     Weight      
1   1           100
1   2           95
1   3           96
1   4           94
1   5           93

现在删除第2行和第4行。所以我有......

id  VisitNo     Weight      
1   1           100
1   3           96
1   5           93

但我需要的是......

id  VisitNo     Weight      
1   1           100
1   2           96
1   3           93

我需要完成上述的SQL查询是什么?

感谢

1 个答案:

答案 0 :(得分:1)

您不应该真正“重新组织”数据库中的密钥。如果您以关系方式使用数据库,则可以从另一个表中引用VisitNo,作为将权重信息链接到您从访问中保存的其他信息的方式。此链接称为关系,ID称为主键,对于表中的行,它永远不会更改,因为它会破坏其他表中的任何引用(这些引用称为外键)。

虽然在您的VisitNo序列中看起来很不错并且“整洁”,但在删除记录时,这并不是真正正确的过程。

然而,没有这个课程的重点,这里是你如何改变VisitNo,假设它根本不是一个关键,而是一个用户数据(即我第一次去健身房,我第二次去健身房,第三次去健身房)

CREATE TABLE #RowNumber (
  RowNumber int IDENTITY (1, 1),
  id INT,
  Weight INT  )

INSERT #RowNumber (emp_id)
SELECT id, Weight
FROM tblMyTable
WHERE id = 1
ORDER BY VisitNo

SELECT * FROM #RowNumber

DROP TABLE #RowNumber

如果运行此查询(将tblMyTable替换为表的名称),您将看到RowNumber列基本上是重新编号的VisitNo。你可以使用这些数据扔回你的桌子......虽然在这方面你的表结构有一个小问题。您需要表上的主键为每行提供一个很好的唯一句柄:

recordid    id  VisitNo     Weight      
1           1   1           100
2           1   2           95
3           1   3           96
4           1   4           94
5           1   5           93

如果没有这个,你将无法在桌面上更新新的VisitNo,如下所示:

recordid    id  VisitNo     Weight      
1           1   1           100
3           1   3           96
5           1   5           93

更改后,它看起来像这样:

recordid    id  VisitNo     Weight      
1           1   1           100
3           1   2           96
5           1   3           93