访问 SQL - 将列更改为自动编号?

Posted

技术标签:

【中文标题】访问 SQL - 将列更改为自动编号?【英文标题】:Access SQL - ALTER COLUMN to AutoNumber? 【发布时间】:2014-06-16 06:54:46 【问题描述】:

如何使用 SQL 更改 MS Access 中的表以将数据类型更改为自动编号?

我尝试过没有成功

ALTER TABLE PERSON ALTER COLUMN PERSON_ID Integer PRIMARY KEY counter
);
ALTER TABLE PERSON ALTER COLUMN PERSON_ID Integer PRIMARY KEY AUTONUMBER
);
ALTER TABLE PERSON ALTER COLUMN PERSON_ID Integer PRIMARY KEY AUTOINCREMENT
);

每次我遇到相同的问题“语法错误”时,它都会突出显示 SQL 中的最后一个单词。

【问题讨论】:

【参考方案1】:

对于 Access 中的数据定义 (DDL) 查询,您可以使用 COUNTER 定义自动编号字段。您试图在同一个字段上同时使用 Integercounter,但这是行不通的。

我刚刚尝试过,它在 Access 2010 中对我有用:

ALTER TABLE PERSON ALTER COLUMN PERSON_ID COUNTER PRIMARY KEY 

请注意,为了使此语句起作用

表格必须为空,并且 该表必须没有主键,甚至在 [PERSON_ID] 字段上也不能。

如果表中已有行,则 Access 将不允许您将 Numeric (Long Integer) 字段转换为 AutoNumber。在这种情况下,您需要使用自动编号主键创建一个新表,然后将旧表中的行插入到新表中。

例如,对于名为 [PERSON] 且包含列的现有表

PERSON_ID 整数 PERSON_NAME TEXT(50)

你需要创建一个新表

CREATE TABLE PERSON_NEW (PERSON_ID COUNTER PRIMARY KEY, PERSON_NAME TEXT(50))

然后将记录复制过来

INSERT INTO PERSON_NEW
SELECT * FROM PERSON

【讨论】:

不幸的是,该表中已有数据。如果有数据,有什么办法可以做到吗?我正在基于另一个具有相同名称、字段和现有表中所有数据的表(对于学校项目)创建此表,Person_ID 也是另一个表中的 FK,因此我要保持数据相同。 我有什么机会可以让您帮助解决另一个问题吗?如果我在主要部分中询问,我认为它会关闭 您知道如何在 SQL 中允许用户拥有对报告和数据的读取权限以及创建新报告的能力吗?我在 SQL 中创建了用户组和用户,但不知道如何允许用户创建新报告 @WillNZ 如果您指的是 Access 数据库本身中的用户级安全性 (ULS)(正如您的其他问题 here 似乎暗示的那样),那么我无法提供太多帮助, 对不起。我从未真正使用过 ULS,现在它已被弃用(并从 .accdb 文件格式中删除),我只是坚持使用文件级权限来控制 .accdb/ 上的只读与读写访问的策略。 mdb 文件作为一个整体,对于任何更复杂的东西,我将数据库后端移动到 SQL Server。 @戈德汤普森。 +1 出色的解决方案。我学到了一些东西,这让我摆脱了困境,谢谢。我也欠你一杯啤酒。

以上是关于访问 SQL - 将列更改为自动编号?的主要内容,如果未能解决你的问题,请参考以下文章

sql 用于将列更改为作为主键的标识列的SQL代码。您必须删除密钥,删除列,将列添加回i

SQL Server 2008 - 从 Float 将列更改为 Varchar 产生科学记数法

如何将列更改为行[重复]

Postgresql以通用方式将列更改为行

使用条件将列更改为单独的数据框

将列更改为可为空的查询不起作用[重复]