Tsql 一次重命名多个表

Tsql 一次重命名多个表,tsql,sql-server-2012,Tsql,Sql Server 2012,我需要一些sql代码,我可以定期使用这些代码一次重命名多个表。下面的代码是我想要的,如果我可以使用update语句,但不能。尽可能简单 UPDATE sys.tables SET name = SUBSTRING(name, CHARINDEX('PP_', name),LEN(name)) WHERE CHARINDEX('PP_', name) > 0 使用sp_rename重命名对象。下面是一个生成并执行所需脚本的示例 DECLARE @SQL nvarchar(MAX) =

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

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

使用
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';';

这对我很有帮助,谢谢你。是否存在类似于删除满足相同条件的相同表的操作?您的意思是
删除表
?只需将选择列表更改为
SELECT'DROP TABLE'+QUOTENAME(s.name)+'.+QUOTENAME(t.name)+';'是的,但是有没有办法一次把它们全部删除?@BenW,我更新了我的答案来回答你的问题。