【问题标题】:How to change column name if it contains certain characters如果列名包含某些字符,如何更改它
【发布时间】:2015-04-19 15:47:05
【问题描述】:

如何使用SQL Server更改表列的名称。

数据库表如下所示:

|第 1 栏 |第 2 栏 |第 3 栏 | Q115($) | Q215($) | Q315($) | .... | QXYY($)|

随着时间的推移以“季度”+“年”+“($)”格式添加新列

我想编写一个在 Microsoft SQL Server 中执行以下操作的查询:

对于所有包含“($)”的列:

将列名从 QXYY($) 更改为 20YY QX

【问题讨论】:

  • 这个问题的答案取决于您使用的数据库引擎,您的问题中没有包含该引擎
  • 我不得不说这是一个非常糟糕的数据库设计——为每年的每个季度添加列。这就是行的用途。

标签: sql sql-server


【解决方案1】:

更改列名可能是您想要手动执行的操作,而不是大规模更改。您可以使用sys.all_columns 表获取数据库中所有表中所有列的列表,例如

select      all_objects.name as Table_nm, all_columns.name as Column_nm
from        sys.all_columns
inner join  sys.all_objects
    on      all_objects.object_id = all_columns.object_id
where       all_columns.name like '%$%'

看起来重命名列是通过存储过程完成的,因此您可以使用该查询的输出来创建其他查询的字符串来更新所有违规记录。 https://msdn.microsoft.com/en-us/library/ms188617.aspx

祝你好运!

【讨论】:

    【解决方案2】:

    Powershell:

    push-location;
    import-module sqlps -disablenamechecking;
    pop-location;
    
    $s = new-object microsoft.sqlserver.management.smo.server '.';
    $tbl = $s.databases['MyDB'].tables['MyTbl'];
    foreach ($col in $tbl.Columns) {
       if ($col -match '^Q([1-4])([0-9][0-9])\(\$\)$') {
          $newName = "20$($matches[2]) Q$($matches[1])";
          $col.Rename( $newName );
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-24
      • 2015-08-15
      • 2020-03-25
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2018-11-18
      • 2020-10-30
      • 1970-01-01
      相关资源
      最近更新 更多