使用 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 中的列的主要内容,如果未能解决你的问题,请参考以下文章