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

Wymień wszystkie kolumny, do których odwołuje się wszystkie procedury wszystkich baz danych

Spowoduje to uzyskanie listy, której szukasz, jednak nie pomoże ci, jeśli masz takie odwołania do kolumn osadzone w dynamicznym SQL (i możesz nie znaleźć odwołań, które opierają się na odroczonym rozpoznawaniu nazw). SQL Server nie analizuje tekstu procedury składowanej w celu uzyskania danych wyjściowych DMV.

Wypróbuj teraz z COLLATE klauzule dotyczące przypadków, w których masz bazy danych na tym samym serwerze z różnymi sortowaniami.

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'UNION ALL
SELECT 
  [database]  = ''' + REPLACE(name, '''', '''''') + ''',
  [procedure] = QUOTENAME(s.name) + ''.'' + QUOTENAME(p.name)
                COLLATE Latin1_General_CI_AI, 
  [table]     = QUOTENAME(referenced_schema_name) + ''.'' 
              + QUOTENAME(referenced_entity_name)
                COLLATE Latin1_General_CI_AI,
  [column]    = QUOTENAME(referenced_minor_name)
                COLLATE Latin1_General_CI_AI
FROM ' + QUOTENAME(name) + '.sys.schemas AS s
INNER JOIN ' + QUOTENAME(name) + '.sys.procedures AS p
ON s.[schema_id] = p.[schema_id]
CROSS APPLY ' + QUOTENAME(name) 
+ '.sys.dm_sql_referenced_entities'
+ '(QUOTENAME(s.name) + ''.'' + QUOTENAME(p.name), N''OBJECT'') AS d
WHERE d.referenced_minor_id > 0'
FROM sys.databases 
  WHERE database_id > 4 
  AND [state] = 0;

SET @sql = STUFF(@sql,1,11,'');

EXEC sp_executesql @sql;

Również CROSS APPLY składnia nie zadziała, jeśli masz bazy danych, które są w trybie zgodności 80. Tylko upewnij się, że nie wykonujesz kodu w takiej bazie danych i powinno działać poprawnie (nawet jeśli niektóre docelowe bazy danych są w 80).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy lepiej zrobić equi łączyć w klauzuli from czy klauzula where?

  2. Rozpoznawanie DateTimeOffset w c# i SQL Server

  3. SQL Server dbo.sysdiagrams to tabela użytkownika lub tabela systemowa

  4. 3 sposoby na usunięcie zduplikowanych wierszy w SQL Server, ignorując klucz podstawowy

  5. Wyższy wynik zapytania ze słowem kluczowym DISTINCT?