Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Liệt kê tất cả các cột được tham chiếu trong tất cả các thủ tục của tất cả các cơ sở dữ liệu

Điều này sẽ nhận được danh sách bạn đang theo dõi, tuy nhiên nó sẽ không giúp ích cho bạn nếu bạn có các tham chiếu cột như vậy được nhúng trong SQL động (và có thể không tìm thấy các tham chiếu dựa vào độ phân giải tên trì hoãn). SQL Server không phân tích cú pháp văn bản của thủ tục được lưu trữ để đưa ra đầu ra DMV.

Hãy thử ngay bây giờ với COLLATE các điều khoản để giải quyết các trường hợp bạn có cơ sở dữ liệu trên cùng một máy chủ với các đối chiếu khác nhau.

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;

Ngoài ra, CROSS APPLY cú pháp sẽ không hoạt động nếu bạn có cơ sở dữ liệu ở chế độ tương thích 80. Chỉ cần đảm bảo rằng bạn không thực thi mã trong cơ sở dữ liệu như vậy và nó sẽ hoạt động tốt (ngay cả khi một số cơ sở dữ liệu đích ở 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. Tạo hàng dựa trên giá trị cột

  2. Thay đổi hiệu suất thu thập dữ liệu có bị hạn chế đối với các bảng đã bật CDC không?

  3. Cách liên kết cơ sở dữ liệu Access với SQL Server trong Access 2016

  4. Khởi động chậm dịch vụ báo cáo SQL 2008 ở chế độ gốc

  5. Khắc phục “Lỗi tràn số học chuyển đổi int thành kiểu dữ liệu số” trong SQL Server