我需要一些可以定期用来一次重命名多个表的sql代码。如果可以使用update语句但不能使用,下面的代码是我想要的。尽可能简单。
UPDATE sys.tables
SET name = SUBSTRING(name, CHARINDEX('PP_', name),LEN(name))
WHERE CHARINDEX('PP_', name) > 0
答案 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';';