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

Trong SQL Server, làm cách nào tôi có thể tìm thấy ở mọi nơi một cột được tham chiếu?

Cảnh báo: Mặc dù đây là một phương pháp tìm kiếm văn bản, tập lệnh mà tôi sắp chia sẻ đã giúp tôi tiết kiệm rất nhiều giờ . Nó tìm kiếm bên trong:

  • hàm vô hướng
  • các hàm có giá trị bảng
  • thủ tục được lưu trữ
  • lượt xem
  • trình kích hoạt

Tôi cần chỉ định một đối chiếu để làm cho nó hoạt động với tôi.

SELECT
    sys.objects.object_id, 
    sys.schemas.name AS [Schema], 
    sys.objects.name AS Object_Name, 
    sys.objects.type_desc AS [Type]
FROM sys.sql_modules (NOLOCK) 
INNER JOIN sys.objects (NOLOCK) ON sys.sql_modules.object_id = sys.objects.object_id 
INNER JOIN sys.schemas (NOLOCK) ON sys.objects.schema_id = sys.schemas.schema_id
WHERE
    sys.sql_modules.definition COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%{Column Name}%' ESCAPE '\'
ORDER BY sys.objects.type_desc, sys.schemas.name, sys.objects.name

Đầu ra như sau:

Cập nhật :Nếu bạn cần tìm kiếm một bảng nhất định, SP, v.v., bạn có thể sử dụng một truy vấn chuyên biệt hơn:

DECLARE @SCHEMA_NAME VARCHAR(100) = 'dbo';
DECLARE @OBJECT_NAME VARCHAR(100) = 'MY_OBJECT';

SELECT
    sys.objects.object_id,
    sys.schemas.name AS [Schema], 
    sys.objects.name AS Object_Name, 
    sys.objects.type_desc AS [Type]
FROM sys.sql_modules (NOLOCK) 
INNER JOIN sys.objects (NOLOCK) ON sys.sql_modules.object_id = sys.objects.object_id 
INNER JOIN sys.schemas (NOLOCK) ON sys.objects.schema_id = sys.schemas.schema_id
WHERE
    (
           '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]'[email protected]_NAME+'.'[email protected]_NAME+'[^a-z_]%' ESCAPE '\'
        OR '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]\['[email protected]_NAME+'\].'[email protected]_NAME+'[^a-z_]%' ESCAPE '\'
        OR '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]'[email protected]_NAME+'.\['[email protected]_NAME+'\][^a-z_]%' ESCAPE '\'
        OR '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]\['[email protected]_NAME+'\].\['[email protected]_NAME+'\][^a-z_]%' ESCAPE '\'
    )
ORDER BY sys.objects.type_desc, sys.schemas.name, sys.objects.name

Tái bút :Cả hai truy vấn cũng tìm kiếm bên trong nhận xét.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sao chép các hàng dựa trên giá trị cột trong mỗi hàng

  2. Cách tạo trường tăng tự động trong truy vấn chọn

  3. CTE vòng lặp vô hạn với TÙY CHỌN (maxrecursion 0)

  4. Tôi có thể đặt một lược đồ mặc định cho trong một quy trình được lưu trữ không?

  5. SQL Server 2005 và phạm vi bảng tạm thời