Stworzyłem tabelę w środowisku programistycznym do celów testowych i istnieje kilka sp, które są refowanie tej tabeli. Teraz muszę upuścić tę tabelę, a także zidentyfikować wszystkie sp, które odnoszą się do tej tabeli. Mam trudności ze znalezieniem listy wszystkich SP. Proszę zaproponować jakieś zapytanie, zakładając, że nazwa tabeli jest „x”, a baza danych jest SQL Server 2005.Jak zidentyfikować wszystkie procedury przechowywane odnoszące się do konkretnej tabeli
Odpowiedz
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'
BTW - tutaj jest poręcznym źródłem dla tego typu pytania: http://msdn.microsoft.com/en-us/library/ms345522%28v=SQL.90%29.aspx
Czy jest jakikolwiek powód, aby to zrobić, uzyskując dostęp do 'ROUTINE_DEFINITION 'na' INFORMATION_SCHEMA.ROUTINES'? – Marie
@Marie - SQL Server 2005 (AFAIK) nie ma tego. – Chains
Pytanie, czy to rozwiązanie znajduje obiekty odniesienia, do których się odwołują * wewnątrz * ciągu znaków? jak, 'set @Query =" SELECT * FROM Object_I_Need_To_Find_References ... "; ' –
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>%'
Wystarczy pamiętać, że będzie to również włączyć się nastawy SP gdzie nazwa tabeli jest w komentarzach lub w których nazwa tabeli jest podłańcuchem innej używanej nazwy tabeli. Na przykład, jeśli masz tabele o nazwach "test" i "test_2" i próbujesz wyszukać SP z "testem", otrzymasz wyniki dla obu.
Wypisywanie 'syscomments' w ten sposób nie jest niezawodne w przypadku długich procedur, ponieważ dzieli definicję na 4000 znaków w wielu wierszach. 'sys.sql_modules' unika tego. –
Dobra uwaga. Zaktualizowałem go, aby używał 'sys.sql_modules'. –
syscomments został zdemaskowany w każdej z kilkunastu odpowiedzi na to samo pytanie http://stackoverflow.com/search?tab=votes&q=user%3a27535%20syscomments – gbn
Sposób non-query byłoby użyć SQL Server Management Studio.
Znajdź tabelę, kliknij prawym przyciskiem myszy i wybierz "Wyświetl zależności".
EDIT
Ale, jak komentujących powiedział, że nie jest bardzo niezawodny.
W 2005 r. Informacje o zależnościach są niewiarygodne, jeśli obiekty nie zostały utworzone we właściwej kolejności. –
Jak zauważyła @Martin Smith, utworzona zostanie procedura składowana odwołująca się do nieistniejącego obiektu, aczkolwiek z ostrzeżeniem, ale wpis nie zostanie umieszczony w sysdepends. To samo dotyczy procedur przechowywanych odwołujących się do tabeli w zagranicznej bazie danych: Żadna pozycja nie jest nigdy umieszczana w bazie danych sysdepends. Funkcja Antoher polega na tym, że upuszczenie/ponowne utworzenie tabeli lub widoku powoduje przerwanie łańcucha zależności. Te ... err ... funkcje powodują, że śledzenie zależności SQL Server jest praktycznie bezużyteczne. –
Następujące prace na SQL2008 i wyżej. Zawiera listę zarówno przechowywanych procedur i funkcji.
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
OP potrzebuje odpowiedzi dla SQL-Server-2005 – Chains
Następująca kwerenda pobiera wszystkie zapisane nazwy procedury i odpowiednią definicję tych SP na
select
so.name,
text
from
sysobjects so,
syscomments sc
where
so.id = sc.id
and UPPER(text) like '%<TABLE NAME>%'
czasami powyżej zapytań nie da poprawny wynik, nie jest zbudowany w procedurze przechowywanej dostępnych dostać stolik zależności jak:
EXEC sp_depends @objname = N'TableName';
Nie działa z Sql Azure –
Dla mnie to pokazało wyzwalacze i widoki, ale nie przechowywane procs. – NealWalters
UWAGA: Uruchomiłem to w systemie, w którym miałem dostęp do tabel, ale nie przechowywano Proc, więc oczywiście Zapisane Proc nie pojawiły się w wyniku. – NealWalters
poniżej kwerendy jest praca tylko na stole nie dla kolumny
EXEC sp_depends @objname = N'TableName';
poniżej zapytania najlepiej jest to nie przegap niczego nie daje dodatkowych ale nie źle
select distinct
so.name
--, text
from
sysobjects so,
syscomments sc
where
so.id = sc.id
and lower(text) like '%organizationtypeid%'
order by so.name
Dla mnie, nie zwróciło nic na SSMS 2014 uruchomiony przeciwko bazy danych na SQL Server 12.0) – NealWalters
SELECT DISTINCT OBJECT_NAME(OBJECT_ID),
object_definition(OBJECT_ID)
FROM sys.Procedures
WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%'
GO
To będzie działać, jeśli trzeba wymienić nazwę tabeli.
- 1. Usuń wszystkie przechowywane procedury naraz
- 2. Jak wyświetlić wszystkie niesystemowe procedury przechowywane?
- 3. Parsować wszystkie procedury przechowywane w bazie danych
- 4. Zapisz wynik procedury przechowywane w tabeli zmiennej
- 5. Przechowywane procedury i funkcje
- 6. Funkcje a procedury przechowywane
- 7. MySQL: Widoki a procedury przechowywane
- 8. MySQL przechowywane procedury z if
- 9. C#/SQL Pobierz wszystkie przechowywane procedury i ich kod
- 10. Procedury przechowywane w strukturze jednostki
- 11. dwie klasy odnoszące się do siebie
- 12. Jak wyświetlić wszystkie dostępne widoki konkretnej tabeli w SQLite?
- 13. Anonimowe lambdies bezpośrednio odnoszące się do siebie
- 14. Czy procedury przechowywane mogą zwracać zestaw wyników?
- 15. Domyślne instancje typu odnoszące się do siebie
- 16. Kod Pierwsze migracje i procedury przechowywane
- 17. Jeśli indziej w procedury przechowywane SQL Server
- 18. Przechowywane procedury w Pythonie dla PostgreSQL
- 19. Dwa klucze obce odnoszące się do tego samego klucza podstawowego
- 20. Czy procedury przechowywane blokują tabele/wiersze?
- 21. Procedury przechowywane w MYSQL, jeśli instrukcja Problem
- 22. Jak zidentyfikować wywołującego procedury przechowywanej z poziomu Sproc
- 23. Odniesienie odnoszące się do wielu obiektów, jak to jest możliwe?
- 24. Wytworny wywołanie procedury przechowywane i mapa wynik do klasy
- 25. Czy Entity Framework Code obsługuje najpierw procedury przechowywane?
- 26. Czy statystyki odnoszące się do kolumny uniemożliwiają zrzucenie tej kolumny?
- 27. Jak zliczyć wszystkie procedury przechowywane na serwerze SQL dla bazy danych?
- 28. Pass Typ wartość tabeli SQL Server procedury przechowywane przez Entity Framework
- 29. Określanie, które obiekty odwołują się do tabeli w SQL Server
- 30. Samouczek Rubiego, jak pisać procedury przechowywane dla PostgreSQL?
możliwy duplikat [SQL Server 2005 - Znajdź, które zapisane procesy przebiegają do konkretnej tabeli] (http://stackoverflow.com/questions/3361141/sql-server-2005-find-which-stored-procs-run- do-a-specific-table) –
możliwy duplikat [jak wyszukiwać Sql Server 2008 R2 procedur przechowywanych na ciąg znaków?] (http://stackoverflow.com/questions/6354256/how-to-search-sql-server- 2008-r2-stored-procedures-for-a-string) lub http://stackoverflow.com/questions/3991030/searching-in-sql-management-studio-2005/3991077#3991077 – gbn
do ekspertów: jak o serwer inny niż MS SQL? – Deian