如果列名包含某些字符,如何更改列名

时间:2015-04-08 20:35:44

标签: sql sql-server

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

数据库表如下所示:

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

随着时间的推移添加新列的格式为" Quarter" +" Year" +"($)"

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

对于包含"($)":

的所有列

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

2 个答案:

答案 0 :(得分:0)

更改列名可能是您想手动执行的操作,而不是批量更改。您可以使用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

祝你好运!

答案 1 :(得分:0)

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 );
   }
}