Переименовать несколько таблиц одновременно - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужен некоторый SQL-код, который я могу регулярно использовать для переименования нескольких таблиц одновременно.Код ниже - то, что я хотел бы, если бы я мог использовать оператор обновления, но не могу.Как можно проще.

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

1 Ответ

0 голосов
/ 19 декабря 2018

Используйте 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';';
...