Как остановить хранимые procs от нытья о недостающем столбце, который я собираюсь удалить в SQL Server 2008?

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

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

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

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

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

Используйте этот скрипт. Он также вернет триггеры. Если у многих таблиц есть столбец с тем же именем, вы можете добавить имя сказки в том же месте. Этот скрипт работает на 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

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

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

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

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

Пол Стивенсон
Менеджер запросов SQL Prompt
Программное обеспечение Red Gate

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

 sp_depends 'TableName' 

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

EDIT: извините, мой плохой. вот код для поиска в коде хранимой процедуры

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

 CREATE PROCEDURE Find_Text_In_SP @StringToSearch varchar(100) AS SET @StringToSearch = '%' [email protected] + '%' 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' 

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

Если вы используете 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; 

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

Давайте будем гением компьютера.