首页 > 解决方案 > 在 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

查询的结果运行

标签: sqlsql-server

解决方案


推荐阅读