Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

W SQL Server, jak mogę znaleźć wszędzie, gdzie występuje odwołanie do kolumny?

Ostrzeżenie: Mimo że jest to metoda wyszukiwania tekstu, skrypt, który zamierzam udostępnić, zaoszczędził mi wiele godzin . Przeszukuje wewnątrz:

  • funkcje skalarne
  • funkcje o wartościach tabelarycznych
  • procedury przechowywane
  • widoki
  • wyzwalacze

Musiałem określić sortowanie, aby działało dla mnie.

SELECT
    sys.objects.object_id, 
    sys.schemas.name AS [Schema], 
    sys.objects.name AS Object_Name, 
    sys.objects.type_desc AS [Type]
FROM sys.sql_modules (NOLOCK) 
INNER JOIN sys.objects (NOLOCK) ON sys.sql_modules.object_id = sys.objects.object_id 
INNER JOIN sys.schemas (NOLOCK) ON sys.objects.schema_id = sys.schemas.schema_id
WHERE
    sys.sql_modules.definition COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%{Column Name}%' ESCAPE '\'
ORDER BY sys.objects.type_desc, sys.schemas.name, sys.objects.name

Wynik wygląda następująco:

Aktualizacja :Jeśli potrzebujesz wyszukać określoną tabelę, SP itp., możesz użyć bardziej wyspecjalizowanego zapytania:

DECLARE @SCHEMA_NAME VARCHAR(100) = 'dbo';
DECLARE @OBJECT_NAME VARCHAR(100) = 'MY_OBJECT';

SELECT
    sys.objects.object_id,
    sys.schemas.name AS [Schema], 
    sys.objects.name AS Object_Name, 
    sys.objects.type_desc AS [Type]
FROM sys.sql_modules (NOLOCK) 
INNER JOIN sys.objects (NOLOCK) ON sys.sql_modules.object_id = sys.objects.object_id 
INNER JOIN sys.schemas (NOLOCK) ON sys.objects.schema_id = sys.schemas.schema_id
WHERE
    (
           '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]'[email protected]_NAME+'.'[email protected]_NAME+'[^a-z_]%' ESCAPE '\'
        OR '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]\['[email protected]_NAME+'\].'[email protected]_NAME+'[^a-z_]%' ESCAPE '\'
        OR '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]'[email protected]_NAME+'.\['[email protected]_NAME+'\][^a-z_]%' ESCAPE '\'
        OR '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]\['[email protected]_NAME+'\].\['[email protected]_NAME+'\][^a-z_]%' ESCAPE '\'
    )
ORDER BY sys.objects.type_desc, sys.schemas.name, sys.objects.name

PS :Oba zapytania przeszukują również komentarze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DAY() Przykłady w SQL Server (T-SQL)

  2. Jak przekonwertować uniksowy znacznik czasu na wartość daty/godziny w SQL Server

  3. JPA SQL Server bez mapowania dialektu dla typu JDBC:-9

  4. Jak połączyć się z SQL Server za pomocą sqlalchemy przy użyciu uwierzytelniania systemu Windows?

  5. Dlaczego UDF jest o wiele wolniejszy niż podzapytanie?