Скрипт tsql для поиска таблиц, не используемых хранимыми процедурами, представлениями, функциями и т. д.? - PullRequest
6 голосов
/ 18 сентября 2009

Есть ли скрипт t-sql для определения таблиц, которые не используются на сервере sql хранимыми процедурами, представлениями, функциями и т. Д. У меня есть база данных, в которой есть сотни таблиц, если не больше, и прежде чем я уйду отбрасывая таблицы, я хотел узнать, есть ли сценарий, который может пройти через каждый объект в базе данных и сказать мне, если какие-либо таблицы используются.

Ответы [ 3 ]

8 голосов
/ 18 сентября 2009

Если вы хотите использовать скрипт, здесь (список зависимостей объектов SQL Server) - очень хорошая статья о том, как создавать сценарии зависимостей. Используя это, вы можете составить список таблиц, на которые ссылаются. У вас есть список таблиц в вашей базе данных, поэтому вы знаете, какие из них не используются.

В статье используется хранимая процедура

sp_depends
. Однако у него есть один сбой. Например, если у вас есть хранимая процедура, использующая таблицу «MyTable», и вы создаете процедуру перед созданием таблицы «MyTable», вы не увидите ее в списке зависимостей. Вот почему вы должны искать в таблице
syscomments
, чтобы найти зависимости. Но это также не является точным, потому что если у вас есть имя таблицы в комментарии, вы будете относиться к ней как к зависимости.
8 голосов
/ 19 сентября 2009

Насколько я знаю, вы не можете полагаться на управление зависимостями SQL Server. Лукаш указал на один из многих вопросов.

В 2005 году старая таблица syscomments эквивалентна sys.sql_modules.

Чтобы найти все имена таблиц, которые не встречаются в коде TSQL (представления, SP, функции), используйте этот оператор:

select t.name, sys.objects.name foundin, sys.objects.type_desc
from sys.objects t 
left outer join 
    sys.sql_modules
    inner join sys.objects on sys.objects.object_id = sys.sql_modules.object_id
on sys.sql_modules.definition like '%' + t.name + '%'
where t.type = 'U'
and sys.objects.name is null
order by t.name, type_desc, foundin

Если вы закомментируете строку с условием IS NULL, вы найдете все вхождения всех имен таблиц в коде TSQL. (независимо от того, действительно ли имя таблицы относится к этой таблице)

4 голосов
/ 18 сентября 2009

Если вы используете Management Studio, вы можете щелкнуть правой кнопкой мыши таблицу и «просмотреть зависимости».

А вот ссылка на статью о том, как это сделать в tsql, и я думаю, это то, что вы ищете:

https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=277

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

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