Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Избройте всички колони, посочени във всички процедури на всички бази данни

Това ще получи списъка, който търсите, но няма да ви помогне, ако имате такива препратки към колони, вградени в динамичен SQL (и може да не намерите препратки, които разчитат на отложено разрешаване на имена). SQL Server не анализира текста на съхранената процедура, за да излезе с DMV изход.

Опитайте сега с COLLATE клаузи за справяне със случаи, когато имате бази данни на един и същ сървър с различни съпоставки.

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;

Също така CROSS APPLY синтаксисът няма да работи, ако имате бази данни, които са в режим на съвместимост 80. Просто се уверете, че не изпълнявате кода в такава база данни и той трябва да работи добре (дори ако някои от целевите бази данни са в 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. Как да убиете всички текущи връзки към база данни на SQL Server 2005?

  2. Как да запазите изчислена колона GEOMETRY или GEOGRAPHY

  3. LOG() Примери в SQL Server

  4. Конфигуриране на известия за поща в базата данни в MS SQL Server

  5. Филтриране на SQL Server 2008