Как я могу узнать, какая хранящаяся процедура или триггер использует таблицу на SQL Server 2008 R2?

dba.stackexchange https://dba.stackexchange.com/questions/7956

Вопрос

Это тот случай, когда я проверяю БД, существует архивная таблица, которая сохраняет историю пользователя, и есть процедура триггера или хранилища, которая через некоторое время удаляет строки из этой таблицы, чтобы избежать негабаритного размера То же самое, я не разработал БД, я просто принимаю поддержание приложения, которое использует этот БД, поэтому я не знаю названия этих хранимых процедур или триггеров, я хочу найти эту сохраненную процедуру или запустите, проверьте код и измените его, чтобы оставить эту «историю пользователя» дольше в таблице.

Кто -то сказал мне проверить таблицу «Sysobjects», где я действительно могу увидеть что -то с тем же именем таблицы, но это единственная информация, которую я смог получить, что -нибудь посоветует?

Спасибо.

Это было полезно?

Решение

Поиск всего кода, используя sys.sql_modules

SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules sm
WHERE definition LIKE '%Mytable%'

Или использовать Поиск SQL Red Gate что совершенно бесплатно

Не надо Использовать syscomments или information_schema.rubbish

Другие советы

Проверять ApexSQL Search

Поиск ApexSQL-это бесплатная студия управления SQL Server и Visual Studio, которая, помимо прочих функций, имеет функцию View Depertive. Функция зависимостей представления имеет возможность визуализировать все отношения объектов базы данных SQL, в том числе между зашифрованными и системными объектами, специфическими объектами SQL Server 2012 и объектами, хранящимися в базах данных, зашифрованных с прозрачным шифрованием данных (TDE)

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

Отказ от ответственности: я работаю в ApexSQL в качестве инженера поддержки

Для будущего ссылки по состоянию на 2008 год также можно использовать DMV. sys.dm_sql_referencing_entities. Анкет Я обычно предпочитаю его использовать SQL_Modules, поскольку он избегает ложных срабатываний, среди прочего. Я обсудил это здесь Но в основном, если у вас есть кусок кода, как это:

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id) 
FROM sys.sql_modules WHERE [definition] LIKE '%ABC%'

В итоге вы получите результаты для таблицы ABC, таблицы Abclog View vw_abc, сохраненная процедура SP_UPDATE_ABC и т. Д. Также, насколько мне известно, DMV будет обрабатывать зашифрованные SPS, а также незашифрованные, в то время как метод SQL_Modules работает только с неветронутыми SPS. Анкет

DMV -версия того же запроса такова:

SELECT * FROM sys.dm_sql_referencing_entities('dbo.ABC', 'OBJECT')

Также вы можете использовать sys.sql_expression_dependencies Каталог вид. Используйте этот запрос:

SELECT 
referencing_object_name = obj.name, 
referencing_object_type_desc = obj.type_desc, 
referenced_object_name = referenced_entity_name
FROM sys.sql_expression_dependencies sd 
INNER JOIN sys.objects obj 
ON sd.referencing_id = obj.[object_id] 
WHERE referenced_entity_name = 'MyTable'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top