sql - 在 SQL Server 2019 (v15) 中为多个表重命名多个列
问题描述
我有大约 700 个没有数据的表,我需要重命名它们的一些列名。
首先,我需要将列名的第一个字母大写,例如 go from [FIRST NAME]
to [First Name]
。
其次,我需要去掉中间的空格,例如: from [First Name]
to FirstName
。
为了测试,我创建了一个包含两个表的数据库。
我正在使用一个工作函数以我需要的方式将第一个字母大写。
我有 3 个查询变体,除了结果之外,它们都没有实际工作。
/* 变体 1 调用函数 dbo.CapitalizeFirstLetter */
SELECT
'Exec SP_RENAME ''' + B.NAME + '.' + A.NAME
+ ''', ''' + dbo.CapitalizeFirstLetter(A.NAME)
+ ''', ''COLUMN'''
FROM
sys.columns A
INNER JOIN
sys.tables B ON A.OBJECT_ID = B.OBJECT_ID
AND OBJECTPROPERTY(b.OBJECT_ID, N'IsUserTable') = 1
WHERE
system_type_id IN (SELECT system_type_id FROM sys.types)
AND CHARINDEX(' ', a.NAME) <> 0
ORDER BY
b.name
/* 变体 2 调用函数 dbo.CapitalizeFirstLetter */
SELECT
'Exec SP_RENAME ''' + B.NAME + '.' + A.NAME
+ ''', ''' + REPLACE(A.NAME, A.NAME, dbo.CapitalizeFirstLetter(A.NAME))
+ ''', ''COLUMN'''
FROM
sys.columns A
INNER JOIN
sys.tables B ON A.OBJECT_ID = B.OBJECT_ID
AND OBJECTPROPERTY(b.OBJECT_ID, N'IsUserTable') = 1
WHERE
system_type_id IN (SELECT system_type_id FROM sys.types)
AND CHARINDEX(' ', a.NAME) <> 0
ORDER BY
b.name
/* 变体 3 消除中间的空格 */
SELECT
'EXEC SP_RENAME ''' + B.NAME + '.' + A.NAME
+ ''', ''' + REPLACE(A.NAME, ' ', '')
+ ''', ''COLUMN'''
FROM
sys.columns A
INNER JOIN
sys.tables B ON A.OBJECT_ID = B.OBJECT_ID
AND OBJECTPROPERTY(b.OBJECT_ID, N'IsUserTable') = 1
WHERE
system_type_id IN (SELECT system_type_id FROM sys.types)
AND CHARINDEX(' ', a.NAME) <> 0
ORDER BY
b.name
解决方案
推荐阅读
- azure-devops - Azure Dev Ops 测试步骤未找到测试 (.net 5)
- c - 传递的指针变为 0x1
- google-app-engine - Google Cloud Tasks 推送队列已停止工作
- filenames - 渐进式文件名用完时的最佳实践
- ios - AVFoundation / AudioKit 播放低频声音会产生咔嗒声/爆音
- mysql - MySQL UNION SELECT FOLLOWING NEXT COLUM ID
- guacamole - quacamole javascript客户端http隧道正在连接
- javascript - 从结果另一个数组中角度验证数组内的值
- python - 使用 IMDb JSON 评论计算情绪极性
- jquery - 仅按月计算的 Jquery 日期范围或日期选择器