Як я можу знати, яка збережена процедура або тригер використовує таблицю на SQL Server 2008 R2?


9

Це той випадок, що в БД, яку я перевіряю, є архівна таблиця, яка зберігає історію користувачів, і є тригер або процедура зберігання, яка через деякий час видаляє рядки з цієї таблиці, щоб уникнути перевищення розміру так само я не розробляв БД, я просто беруся за обслуговування програми, яка використовує цю БД, тому я не знаю, як називаються ці збережені процедури чи тригери, що я хочу зробити, це знайти цю збережену процедуру або запустити, перевірити код і змінити його, щоб довше залишати цю "історію користувачів" на столі.

Хтось сказав мені перевірити таблицю "sysobjects", де я фактично можу побачити щось з такою ж назвою таблиці, але це єдина інформація, яку я зміг отримати, будь-яку пораду?

Дякую.

Відповіді:


6

Шукайте весь код за допомогою sys.sql_modules

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

Або використовуйте Red Gate SQL Search, який є абсолютно безкоштовним

Не використовуйте системні коментарі або INFORMATION_SCHEMA.RUBBISH


Чи не може хлопець також клацнути правою кнопкою миші на цільовій таблиці та натиснути "Показати залежності" (або якийсь текст для цього)?
Нік Чаммас

@ Nick Chammas: ні, це добре відомо як ненадійне
gbn

@ gbn, я розумію, що систематизація - це зворотна сумісність і може бути видалена з майбутнього випуску, але чи можете ви детальніше розглянути питання, чому б не використовувати INFORMATION_SCHEMA? thx
datagod

@datagod: те саме, чому систематизує як завжди поганий вибір: стовпець визначення nvarchar (4000). Це означає, що ви можете пропустити посилання на таблицю, якщо в позиції рядка> 4000 або прольотом межа між рядками nvarchar (4000) (залежить від того, як ви це обробляєте, чи можу ви
сказати,

@gbn Насправді syscommentsє декілька рядків для об'єкта, який перевищує обмеження 4000 символів, а запити з його використанням настільки ж дійсні sys.sql_modules. Я все ще рекомендую, sys.sql_modulesоднак syscomments, амортизується.
Кеннет Фішер

4

Спробуйте пошук ApexSQL

ApexSQL Search - це БЕЗКОШТОВНА студія управління SQL Server та надбудова Visual Studio, яка, крім інших функцій, має функцію «Перегляд залежностей». Функція Перегляд залежностей має можливість візуалізації всіх зв'язків об'єктів бази даних SQL, включаючи відносини між зашифрованими та системними об'єктами, специфічними об'єктами SQL-сервера 2012 та об'єктами, що зберігаються в базах даних, зашифрованих за допомогою прозорого шифрування даних (TDE)

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

Відмова: Я працюю в ApexSQL як інженер підтримки


2

Для подальшого ознайомлення з 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, таблиці ABCЗмініть подання vw_ABC, збережена процедура sp_Update_ABC тощо. Також, наскільки мені відомо, DMV буде обробляти зашифровані SP, а також незашифровані, тоді як метод sql_modules працює лише з незашифрованими SP .

Версія DMV того ж запиту така:

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

1

Також ви можете використовувати подання каталогу sys.sql_expression_dependitions . Скористайтеся цим запитом:

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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.