Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Daftar semua kolom yang direferensikan dalam semua prosedur dari semua database

Ini akan mendapatkan daftar yang Anda cari, namun itu tidak akan membantu Anda jika Anda memiliki referensi kolom seperti itu yang disematkan dalam SQL dinamis (dan mungkin tidak menemukan referensi yang bergantung pada resolusi nama yang ditangguhkan). SQL Server tidak mengurai teks prosedur tersimpan untuk menghasilkan keluaran DMV.

Coba sekarang dengan COLLATE klausa untuk menangani kasus di mana Anda memiliki database di server yang sama dengan susunan yang berbeda.

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;

Juga CROSS APPLY sintaks tidak akan berfungsi jika Anda memiliki database yang berada dalam mode kompatibilitas 80. Pastikan Anda tidak mengeksekusi kode dalam database seperti itu dan kode tersebut akan berfungsi dengan baik (bahkan jika beberapa database target ada di 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. Tambahkan kunci utama ke tabel yang ada

  2. Bagaimana cara mengganti karakter ke-n di sql server

  3. Tetapkan lokasi kerja secara acak dan setiap lokasi tidak boleh melebihi jumlah karyawan yang ditunjuk

  4. Mengulangi recordset di SQL Server

  5. hitung Jumlah Bijaksana Baris - server Sql