一次重命名多个表

时间:2018-12-19 20:05:37

标签: tsql sql-server-2012

我需要一些可以定期用来一次重命名多个表的sql代码。如果可以使用update语句但不能使用,下面的代码是我想要的。尽可能简单。

UPDATE sys.tables 
SET name = SUBSTRING(name, CHARINDEX('PP_', name),LEN(name))
WHERE CHARINDEX('PP_', name) > 0

1 个答案:

答案 0 :(得分:1)

使用sp_rename重命名对象。下面是一个生成并执行所需脚本的示例。

DECLARE @SQL nvarchar(MAX) =
    (SELECT 'EXEC sp_rename ''' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ''', ''' + SUBSTRING(t.name, CHARINDEX('PP_', t.name),LEN(t.name)) + ''';'
    FROM sys.tables AS t
    JOIN sys.schemas AS s ON s.schema_id = t.schema_id
    WHERE CHARINDEX('PP_', t.name) > 0
    FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)');

EXEC sp_executesql @SQL;

要回答注释中提出的其他问题,您可以使用下面的脚本为这些表生成一个DROP TABLE语句。请注意,如果表具有外键关系,则此方法可能不起作用,因为它不会按依赖关系顺序下降。

DECLARE @SQL nvarchar(MAX) =
    N'DROP TABLE ' + STUFF((SELECT ',' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name)
    FROM sys.tables AS t
    JOIN sys.schemas AS s ON s.schema_id = t.schema_id
    --WHERE CHARINDEX('PP_', t.name) > 0
    FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)'),1,1,'')
    + N';';