使用 SQL 重命名 MS Access 中的列

Posted

技术标签:

【中文标题】使用 SQL 重命名 MS Access 中的列【英文标题】:Rename columns in MS Access using SQL 【发布时间】:2021-01-20 06:35:22 【问题描述】:

在 MS Access 中,我有一些表,其中一些列名在其列名中包含空格(例如 Transaction I)。

我需要使用 SQL 将空格替换为下划线(例如 Transaction_ID)。

虽然我对 SQL 有点熟悉,但是我接触的是 Oracle 环境,所有这些查询和函数在 MS Access 中都不起作用。我对 MS Access 还很陌生。

我已经尝试从我搜索的帖子中使用以下代码,但是无济于事。

alter table EP sp_rename 'Transaction ID' to Transaction_ID
alter table EP rename column 'Transaction ID' to Transaction_ID

【问题讨论】:

表是本地 Microsoft Access 表吗?链接的 SQL Server 表? 这能回答你的问题吗? Rename a field in access vba 【参考方案1】:

Access 没有用于重命名列的内置命令行选项。

(并且您的示例看起来适用于 SQL Server,而且更多,因此它看起来是使用库存储过程函数为您执行此操作。所以,这看起来是 SQL Server 语法 - 而不是 MS Access。

如果要在 Access 中使用 DDL 重命名列?您必须创建一个具有所需名称的新列,然后将数据移动到这个新列,然后删除旧列。

Access 中所谓的 sql 'ddl' 命令实际上在很大程度上遵循 SQL 标准。

所以,在走这条路之前,我会考虑使用内置的 GUI + 表格设计器。 (它会为你做幕后的脏活)。

那么,您可以使用 DDL 重命名列吗?可以,但您必须分 3 步完成。

创建新列。

将数据从旧列复制到新列

删除旧列。

由于索引、可能的关系和其他问题,确实有人想在这里使用内置的表格设计器 + GUI。

但是,您可以在 Access 中使用一个过程 (VBA) 来执行此操作:

假设我们有一个非常糟糕的 City 列名称,名为 [The City]。

要重命名为 City,那么我们可以去:

Sub MyAlter()

  ' create the new column
  CurrentDb.Execute "ALTER TABLE tblHotels ADD COLUMN City TEXT(50)", dbFailOnError

  ' copy the data
  CurrentDb.Execute "UPDATE tblHotels SET City = [The City]", dbFailOnError

  ' drop the origonal column

  CurrentDb.Execute "ALTER TABLE tblHotels DROP COLUMN [The City]", dbFailOnError

End Sub

请记住,Access 中任何带有空格的列 (yuk!!) 都需要用 [] 包围。这适用于 SQL 选择查询、更新查询、插入查询,当然还有用于修改表结构的 DDL 命令。

如果是一次性交易,那么当然只需使用访问权限,在设计模式下打开有问题的表,然后进行更改。

但是,如果你确实因为某些原因确实需要使用一个程序,那么上面的代码在一个访问代码模块中是可以使用的。

或者您可以启动查询生成器,切换到 SQL 视图模式,然后以这种方式输入上述原始 sql。

(您必须分别输入每个 sql 命令 - Access 查询生成器一次只允许一个 SQL 语句。

所以你可以先在上面的 SQL 中输入,点击“!”执行,然后执行另外两条 SQL 语句。

做好备份!!!

当然,任何使用旧列名的代码、任何查询、任何报告等都会中断。因此,更改现有应用程序中的列名是一项高风险的冒险(您可以并且将会破坏您现在拥有的大量代码、现有表单、现有报表和现有 SQL 查询)。

但是,如果这是一次性更新?然后我当然会使用表格设计器。它允许在不删除列的情况下重命名 - 并保留其他字段设置,例如索引、格式等。

上述建议的哪种方法最有意义将取决于您的特定“用例”。

最后但并非最不重要?您可以使用 VBA 代码和该代码中的表对象。这种方法可能是最好的。它不使用 SQL DDL,并且您可以更好地控制给定列的许多功能(必需,允许空值 - 列表还在继续)。这些设置中的大部分都可以在 DDL 中设置 - 但您需要花费大量时间搜索和查找这些设置。

总之?如果可能,我会在这里使用表格设计器。

【讨论】:

以上是关于使用 SQL 重命名 MS Access 中的列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用列表重命名熊猫中的列

用名称中的句点重命名clickhouse中的列

如何使用 SQL 重命名具有关系的 MS Access 表?

使用 SQL 向 MS Access 中的多个表添加列

数据透视表列重命名

需要在 MS Access 中使用链接表更改 sql server 数据库名称