【问题标题】:Change column names that start with 'C' letter using sql?使用sql更改以'C'字母开头的列名?
【发布时间】:2014-10-25 08:10:24
【问题描述】:

假设我有这张桌子:

我想要做的是将所有以字母C 开头的列名更改为另一个字母或另一个单词。 我在 SQL 方面不是很好,我有能力使用 Java 或任何其他程序语言来做到这一点。 但我的目的是只使用 SQL。

有可能吗?

【问题讨论】:

  • 为此,您需要访问表的元数据,这超出了 SQL 标准,因此在数据库供应商之间有所不同。您使用的是什么品牌的数据库?
  • @Guffa 假设我使用的是 sqlite。
  • 您要永久执行此操作还是仅针对单个查询执行此操作?
  • 我不确定这一点,但您可以通过编程更改列标题(在您的代码中使用),而不是实际的列名。正如@gufa 所说,您需要为此访问元数据。如果您在使用元数据的代码中执行此操作,那么编程语言和 sql 中的逻辑/查询将是相同的。
  • @a_horse_with_no_name:我没看懂你的评论,抱歉能解释一下吗?

标签: sql sqlite ddl alter-table


【解决方案1】:

您需要删除并重新创建表。

所以:

1) 使用原始表的所有数据和结构创建一个临时表。这允许您删除原始文件,然后使用相同的名称重新创建它。

Create Table temp as select * from [Table_Name]

2)删除原始表格。

Drop table [Table_Name]

3) 使用新列名创建新表。

Create Table Table_Name
   (Name varchar(20),
    Age int,
    [New_C1] int,
    [New_C2] int),
    [New_C3] int),
   )

4)将临时表中的数据插入到新表中:

Insert into Table_Name (Name, Age, New_C1, New_C2, New_C3)
Select (Name, Age, C1, C2, C3) FROM temp

5)删除临时表:

Drop table temp

注意

  • 我强烈建议将其包装在事务中,这样您就可以回滚。

【讨论】:

  • 这不是我想要的答案,如果我有 100 个以字母 C 开头的列名呢? 1000怎么样?你选择一种很难的方式来做到这一点,我想要更通用的方式。我写的例子只是一个假设。无论如何,谢谢你的回答。
  • 没有其他方法可以做你想做的事。你读过 SQlite 文档吗? Alter Table 语句不为您提供重命名列的方法。如果您有 100 列,我会问您为什么一开始就错误地命名了列。
猜你喜欢
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 2023-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
相关资源
最近更新 更多