sql >> Database >  >> RDS >> Sqlserver

Maak een lijst van alle kolommen waarnaar wordt verwezen in alle procedures van alle databases

Hiermee krijgt u de lijst die u zoekt, maar het zal u niet helpen als u dergelijke kolomverwijzingen hebt ingebed in dynamische SQL (en mogelijk geen verwijzingen vindt die afhankelijk zijn van uitgestelde naamomzetting). SQL Server ontleedt de tekst van de opgeslagen procedure niet om met de DMV-uitvoer te komen.

Probeer het nu met COLLATE clausules voor gevallen waarin u databases op dezelfde server met verschillende sorteringen hebt.

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;

Ook de CROSS APPLY syntaxis werkt niet als u databases hebt die zich in de 80-compatibiliteitsmodus bevinden. Zorg er wel voor dat u de code niet in zo'n database uitvoert en dat het goed zou moeten werken (zelfs als sommige van de doeldatabases in 80 staan).



  1. Hoe een resultatenset / cursor retourneren van een Oracle PL/SQL anoniem blok dat Dynamic SQL uitvoert?

  2. Hoe installeer ik de MySQL-client op de opdrachtregel op mac?

  3. MySQL Workbench kan geen verbinding maken met databaseserver

  4. Wat is het verschil tussen geneste array en associatieve array?