Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 编写查询以生成脚本以重命名整个数据库中的某些列_Sql_Sql Server_Ssms_Sql Server 2019 - Fatal编程技术网

Sql 编写查询以生成脚本以重命名整个数据库中的某些列

Sql 编写查询以生成脚本以重命名整个数据库中的某些列,sql,sql-server,ssms,sql-server-2019,Sql,Sql Server,Ssms,Sql Server 2019,我有一个SQL Server 2019数据库(一个大数据库)。这个数据库有大约3000列和大约200个表,每个表至少有3个存储过程 无论如何,我们在这个数据库中有一些以小写字母开头的列,比如userID。它们应该是UserID。我的老板说我们应该给所有这些栏目重新命名。我使用Select语句来查找这些列 代码如下: select * from information_schema.columns where ascii(left(column_name, 1)) between ascii('a

我有一个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将生成脚本来重命名所有以小写字母开头的列。但是,当存在强制依赖项(例如,绑定到架构的对象)时,重命名将失败,并且不会处理视图、过程和数据。等人

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;
选择
N'EXEC sp_重命名''
+QUOTENAME(s.name)+N'.+QUOTENAME(t.name)+N'.+QUOTENAME(c.name)
+'',''上部(左(c.name,1))+子字符串(c.name,2127)+'',''列';'
从sys.schemas作为
将sys.tables作为t.schema\u id=s.schema\u id上的t连接
将sys.columns作为c.object\u id=t.object\u id上的c连接
哪里
左(c.name,1)将拉丁文1_General_CS_作为上对齐(左(c.name,1))将拉丁文1_General_CS_作为上对齐
t.is_ms_shipped=0;
我建议您使用Visual Studio 2019附带的(包括免费社区版)。创建新的SQL Server数据库项目,导入现有数据库,使用重构-->重命名选项重命名列,然后针对目标数据库发布项目。发布提供了立即应用更改和/或仅生成脚本的选项。脚本将包括列重命名的DDL,以及更改所有引用对象中的列名


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

要重命名对象,需要使用
sys.sp\u rename
,而不是
ALTER
。然而,如果您的数据库是不区分大小写的排序规则,那么这又有什么关系呢
UserID
UserID
UserID
都将成功引用该列。但是,如果您使用区分大小写的排序规则,这将是一个巨大的突破性更改。请使用您的查询为每个需要更改的列生成带有
sys.sp_rename
的行,然后复制所有行并将其粘贴到SSMSD中。这是否回答了您的问题?您需要掌握的一项技能是在internet上搜索有用的信息。我需要一个查询,以便为Select语句的每条记录生成Alter脚本,格式如下:Alter TABLE[TableName]RENAME COLUMN[OldColumnName]为[NewColumnName];或者像这样:ALTER TableName CHANGE COLUMNNAME OLDCLUMNNAME NEWCLUMNNAME数据类型;旧的[old_Column_Name]以小写字母开头,因此[New_Column_Name]应该以大写字母开头。例如:旧名称=用户==>新名称=用户
重命名列
无效的t-SQL,@ImanS3。请参阅我2小时前在您的问题下编写的。@ImanS3,您阅读了我的答案吗?“STRING\u AGG”不是可识别的内置函数名@危险这是您的SSMS版本@ImanS3,与您使用的SQL Server版本无关。SSMS只是SQL Server的IDE。