本文介绍了编写查询以生成一些脚本以重命名整个数据库中的某些列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个SQL Server 2019数据库(一个大数据库)。此数据库大约有3000列和大约200个表,并且对于每个表,我们至少有3个存储过程。

不管怎样,我们在这个数据库中有一些以小写字母开头的列,如userID。它们应该是UserID。我的老板说我们应该给这些栏目重新命名。我使用Select语句查找这些列。

代码如下:

select * from information_schema.columns where ascii(left(column_name, 1)) between ascii('a') and ascii('z');

所以我有列名、表名和模式名。我想要一个生成一些脚本的查询,以便在整个数据库中重命名这些以大写字母开头的列。(过程、表、视图和.)

查询应生成如下脚本:

Alter [sch].[tableName] Alter Column ColumnName INT

如果有更好的方法,请告诉我。

我希望查询或过程执行此操作。

非常感谢.

推荐答案

虽然使用sp_rename重命名表列并不困难,但更改引用视图和存储过程不需要工具的帮助。

下面的T-SQL将生成重命名所有以小写字母开头的列的脚本。然而,它是脆弱的,因为当存在强制依赖关系(例如,架构绑定对象)时,重命名将失败,并且不会处理视图、过程。et.辅助

SELECT
      N'EXEC sp_rename '''
    + QUOTENAME(s.name) + N'.' + QUOTENAME(t.name) + N'.' + QUOTENAME(c.name)
    + ''', ''' + UPPER(LEFT(c.name, 1)) + SUBSTRING(c.name,2,127) + ''', ''COLUMN'';'
FROM sys.schemas AS s
JOIN sys.tables AS t ON t.schema_id = s.schema_id
JOIN sys.columns AS c ON c.object_id = t.object_id
WHERE
    LEFT(c.name, 1) COLLATE Latin1_General_CS_AS <> UPPER(LEFT(c.name, 1)) COLLATE Latin1_General_CS_AS
    AND t.is_ms_shipped = 0;

我建议您使用Visual Studio 2019附带的SSDT(包括免费的社区版)。创建一个新的SQL Server数据库项目,导入现有数据库,使用Refactor-->;Rename选项重命名该列,然后根据目标数据库发布该项目。发布提供了立即应用更改和/或仅生成脚本的选项。该脚本将包括列重命名的DDL以及更改所有引用对象中的列名。

如果列在视图、过程等中使用了不需要的名称作为别名,则还需要更改这些别名。

这篇关于编写查询以生成一些脚本以重命名整个数据库中的某些列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-27 08:22
查看更多