Как не дать хранимым процессам скулить о пропавшем столбце, который я собираюсь удалить в SQL Server 2008? - PullRequest
4 голосов
/ 01 сентября 2010

Я удаляю столбец из одной из часто используемых таблиц в моей базе данных.В прошлый раз, когда я делал это, ошибки начали выползать из всех типов хранимых проков, которые я давно забыл существовать;жаловаться на отсутствующую колонку.(только когда был вызван этот сохраненный процесс)

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

Каков наилучший способ поиска по всем сохраненным процессам (а их у меня довольно много) и удаления ссылки на этот столбец?

Я попытался найти в меню вариант, чтобы сделатьэто, но я не нашел ничего очень очевидного для этого.

любая помощь (кроме того, чтобы сказать мне пройти их все по одному) приветствуется.
ps: конечно, это не значит, чтоЯ буду признателен за ваш комментарий, если вы скажете мне.Я буду только понижать голос: P
(нет, шучу!)

Ответы [ 6 ]

3 голосов
/ 01 сентября 2010

Для добавления в различные решения TSQL есть бесплатный инструмент от Red Gate, который интегрируется в SSMS: SQL Search

2 голосов
/ 22 ноября 2010

Red Gate Software SQL Prompt 5 имеет несколько новых функций, которые могут быть полезны в этой ситуации:

  • Зависимости столбцов : наведите курсор на значокИмя столбца в скрипте и всплывающее окно выдает окно, содержащее список всех объектов, которые используют этот столбец
  • Поиск недопустимых объектов : показывать объекты в базе данных, которые не могут быть использованы, частопоскольку они используют столбцы, которые были удалены

Вы можете загрузить 14-дневную бесплатную пробную версию, чтобы увидеть, будет ли этот инструмент полезным для вас.

Пол Стивенсон
SQL PromptРуководитель проекта
Red Gate Software

2 голосов
/ 01 сентября 2010

Используйте этот скрипт.Это также возвратит триггеры.Если во многих таблицах есть столбцы с одним и тем же именем, вы можете добавить имя сказки в каталог where.Этот скрипт работает на MSSQL 2000, 2005. Я не тестировал его в 2008 году, но он также должен работать нормально.

SELECT o.name
FROM sysobjects o
    INNER JOIN syscomments c ON o.id = c.id
WHERE c.text like '%column_name%'

Редактировать: если вы хотите отфильтровать его только для хранения процедур, добавьте AND type ='P' к предложению where

1 голос
/ 01 сентября 2010

Вы можете использовать опцию Зависимость для этой таблицы, чтобы найти Зависимый объект или список процедур или функций, которые зависят от этой таблицы. Используйте скрипт ниже

sp_depends 'TableName'

другой вариант - создать скрипт для этого столбца, который будет содержать весь текст в процедуре или функции.

1 голос
/ 01 сентября 2010

РЕДАКТИРОВАТЬ: извините, мой плохой. вот код для поиска в коде хранимой процедуры

Следующая хранимая процедура должна быть в состоянии перечислить все хранимые процедуры, текст которых содержит желаемую строку (поэтому поместите в нее имя столбца и удалите):

CREATE PROCEDURE Find_Text_In_SP
@StringToSearch varchar(100) 
AS 
   SET @StringToSearch = '%' +@StringToSearch + '%'
   SELECT Distinct SO.Name
   FROM sysobjects SO (NOLOCK)
   INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
   AND SO.Type = 'P'
   AND SC.Text LIKE @stringtosearch
   ORDER BY SO.Name
GO

Использование:

exec Find_Text_In_SP 'desired_column_name'

Источник здесь

0 голосов
/ 01 сентября 2010

Если вы используете MS SQL позже, чем версия 2000, лучше искать sys.sql_modules , а не sys.syscomments , так как syscomments содержит только записи nvarchar (4000), и искомый текст может быть разбит на две записи.

Так что пока вы можете использовать такой запрос из MSDN

SELECT sm.object_id, OBJECT_NAME(sm.object_id) AS object_name, o.type, o.type_desc, sm.definition
FROM sys.sql_modules AS sm
JOIN sys.objects AS o ON sm.object_id = o.object_id
WHERE sm.definition like '%' + @ColumnName + '%'
ORDER BY o.type;

Вы должны знать, что этот поиск находит любую процедуру, содержащую этот текст, независимо от того, является ли это фактическим именем столбца и к какой таблице принадлежит столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...