Я создал таблицу в среде разработки для тестовых целей, и есть несколько СП'ы, которые refreing этой таблице. Теперь у меня есть, чтобы бросить эту таблицу, а также выявить все СП's, которая относится эта таблица. Я сталкиваются с трудностями, чтобы найти список всех СП'ов. Пожалуйста, предложите некоторые запрос, предполагая, что имя таблицы 'х' и базы данных в SQL сервере 2005.
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'
Кстати-вот удобный ресурс для этого типа вопрос: запрос на SQL-сервер системы каталог чаво
Следующие работы по SQL2008 и выше. Представлен список хранимых процедур и функций.
select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
from sys.objects o inner join sys.sql_expression_dependencies sd on o.object_id = sd.referenced_id
inner join sys.objects sp on sd.referencing_id = sp.object_id
and sp.type in ('P', 'FN')
where o.name = 'YourTableName'
order by sp.Name
Без запроса можно было бы использовать в среде SQL-сервера студии.
Найдите таблицу, щелкните правой кнопкой мыши и выбрать "В вид зависимостей и".
Редактировать
Но, как говорили комментаторы, это не очень надежно.
иногда выше запросов не будет давать правильный результат, есть встроенные хранимой процедуры доступно для получения зависимостей таблицы:
EXEC sp_depends @objname = N'TableName';
Следующий запрос извлекает все имена хранимых процедур и соответствующее определение СП'ы
select
so.name,
text
from
sysobjects so,
syscomments sc
where
so.id = sc.id
and UPPER(text) like '%<TABLE NAME>%'
SELECT
o.name
FROM
sys.sql_modules sm
INNER JOIN sys.objects o ON
o.object_id = sm.object_id
WHERE
sm.definition LIKE '%<table name>%'
Просто имейте в виду, что это также будет воротить СПС, где имя таблицы в комментариях или где имя таблицы является подстрокой другой имя таблицы, которая используется. Например, если у вас есть таблицы по кличке "тест" и "test_2" А вы попробуйте поискать для SPS с "тест" тогда вы'll получить результаты для обеих сторон.
Запрос ниже работает только при поиске зависимостей на столе, а не на колонки:
EXEC sp_depends @objname = N'TableName';
Однако, следующий запрос-это лучший вариант, если вы хотите, чтобы искать всевозможные зависимости, не пропустить ничего. Это на самом деле дает больше информации, чем требуется.
select distinct
so.name
--, text
from
sysobjects so,
syscomments sc
where
so.id = sc.id
and lower(text) like '%organizationtypeid%'
order by so.name
SELECT DISTINCT OBJECT_NAME(OBJECT_ID),
object_definition(OBJECT_ID)
FROM sys.Procedures
WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%'
GO
Это будет работать, если вы должны упомянуть имя таблицы.
Попробуйте Это
SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%your table name%'
У вас в принципе 2 варианта:
----Вариант 1
SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%tablename%'
----Вариант 2
SELECT DISTINCT o.name, o.xtype
FROM syscomments c
INNER JOIN sysobjects o ON c.id=o.id
WHERE c.TEXT LIKE '%tablename%'
Эти 2 запроса, вы получите все хранимые процедуры, которые ссылаются на таблицы. Этот запрос опирается на 2 Сыс таблиц, которые sysobjects и syscomments. В sysobjects является, где все ваши имена объектов БД хранятся это включает в себя хранимые процедуры.
В syscomments содержит текст для всех ваших процедур.
Если вы запроса: *Выберите из syscomments**
Вы'будете иметь таблицу, содержащую идентификатор, который является отображением в таблице sysobjects с текстом хранимой процедуры в качестве последнего столбца.