Как изменить имя схемы таблицы во всех хранимых процедурах

StackOverflow https://stackoverflow.com/questions/101463

  •  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'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top