Как изменить имя схемы таблицы во всех хранимых процедурах
-
01-07-2019 - |
Вопрос
Я знаю, как изменить схему таблицы в SQL server 2005:
ALTER SCHEMA NewSchama TRANSFER dbo.Table1
Но как я могу проверить и / или изменить хранимые процедуры, которые используют старое имя схемы?
Извините:Я имею в виду:Существуют хранимые процедуры, которые имеют старое имя схемы таблицы в sql хранимой процедуры...Как я могу отредактировать все хранимые процедуры, у которых есть dbo.Table1 в теле процедуры...
Решение
Получите список зависимых объектов, щелкнув правой кнопкой мыши по таблице перед изменением схемы, а затем посмотрите, что зависит от таблицы, составьте список и затем измените их.Однако всегда существует вероятность того, что вы что-то пропустите, потому что можно нарушить зависимости, отслеживаемые SQL server.
Но лучшим способом было бы записать базу данных в файл, а затем выполнить поиск по имени таблицы, составить список всех sprocs, где его необходимо изменить, а затем добавить их в скрипт для изменения схемы таблицы.
Другие советы
- Используйте Tasks>Generate Scripts в SSMS, чтобы предоставить серию сценариев Create Proc.
- Используйте Поиск и замену (Альт - H) изменить "Создать " на "Изменить "
- Использование F & R чтобы изменить 'dbo.Table1' на 'dbo.Table2'
- Затем выполните (F5) для изменения всех затронутых SPS.
Простой, но эффективный.
ОБЪЯВИТЬ ПЕРЕМЕННУЮ @SearchObject(100)
УСТАНОВИТЕ @SearchObject = 'имя_таблицы для поиска' - измените 'имя_таблицы для поиска' на название таблицы, в которой вы хотите выполнить поиск
ВЫБЕРИТЕ sc.name [Объект поиска], so.name [Объект-контейнер],
В таком случае.xtype
КОГДА 'U', ТО 'Таблица'
КОГДА 'P', ТО 'Хранимая процедура'
КОГДА 'F', ТО 'Определяемая пользователем функция'
ELSE 'Другое'
END
как [Тип объекта контейнера]
ИЗ системных объектов, так что
ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ системных столбцов включено so.id = sc.id
ГДЕ sc.name НАПРИМЕР, '%' + @SearchObject + '%' И так далее.xtype IN ('U', 'P', 'F') -- U :Таблица , Р :Хранимая процедура, F:Определяемые пользователем функции (udf)
ПОРЯДОК ПО [Контейнерному объекту] ASC
-- Отображение хранимых процедур, содержащих запрошенное имя таблицы.
Выберите текст из системных комментариев, Где текст типа '%from ' + @SearchObject + '%'
(Выберите id из sysobjects, где type='P' и name = ")
-- Отображать содержимое конкретной хранимой процедуры (найдено выше)
--Exec sp_helptext 'Удалить assetbyid'
Например, я создал таблицу Reports, по умолчанию ей будет назначена схема dbo, теперь, если я захочу изменить схему таблицы Reports, сначала я создам новую схему с именем Reporting:
CREATE SCHEMA Reporting
затем я выполню приведенный ниже скрипт, чтобы изменить схему таблицы отчетов с dbo на Reporting:
ALTER SCHEMA Reporting TRANSFER dbo.Reports
ИЛИ для лучшего понимания:
ALTER SCHEMA 'newSchema' TRANSFER 'oldSchema'.'table'