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

T-SQL:Hiển thị các thủ tục được lưu trữ liên quan đến bảng, theo chu kỳ

Điều này sử dụng lược đồ thông tin cho cả bảng và các thủ tục được lưu trữ. Bạn có thể thay đổi hoặc loại bỏ điều kiện ROUTINE_TYPE để thêm các chức năng và bạn có thể thay đổi loại bảng để trả về các chế độ xem.

Câu trả lời này tạo ra kết quả của nó bằng cách kiểm tra các bảng mà một thủ tục được lưu trữ phụ thuộc vào. Tôi nghĩ rằng đây sẽ là một kết quả chính xác hơn nhiều, sau đó kiểm tra xem tên có trong văn bản truy vấn hay không. Nếu thủ tục tham chiếu đến một bảng trong phần nhận xét, thì kết quả này sẽ không được trả về trong truy vấn đầu tiên, nhưng sẽ có trong câu trả lời thứ hai và các câu trả lời khác được đưa ra.

SELECT t.TABLE_NAME, s.ROUTINE_NAME
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.ROUTINES s ON
    s.ROUTINE_NAME IN (SELECT referencing_entity_name 
        FROM sys.dm_sql_referencing_entities(TABLE_SCHEMA + '.' + TABLE_NAME, 'OBJECT'))
    AND s.ROUTINE_TYPE = 'PROCEDURE'
WHERE t.TABLE_TYPE = 'BASE TABLE'

chỉnh sửa :Đây là cách lấy các phụ thuộc mà không cần hàm. (Tôi thích phương pháp này nhất)

SELECT DISTINCT t.name [TableName], p.name [ProcedureName]
FROM sys.objects t 
LEFT JOIN sys.sql_dependencies d ON
    d.referenced_major_id = t.object_id
LEFT JOIN sys.objects p ON
    p.object_id = d.object_id
    AND p.type = 'p'
WHERE t.type = 'u'

Nếu mục đích sử dụng cụ thể của bạn là chỉ tìm bất kỳ chuỗi nào phù hợp với tên bảng, thì bên dưới sẽ hoạt động:

SELECT t.TABLE_NAME, s.ROUTINE_NAME 
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.ROUTINES s 
    ON CHARINDEX(t.TABLE_NAME, s.ROUTINE_DEFINITION) > 0
    AND s.ROUTINE_TYPE = 'PROCEDURE'
WHERE t.TABLE_TYPE = 'BASE TABLE'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi không thành công khi chuyển đổi từ một chuỗi ký tự thành mã định danh duy nhất

  2. Tạo tệp XML từ SQL Server 2008

  3. SQL Server - Cách khóa bảng cho đến khi một quy trình được lưu trữ kết thúc

  4. SUBSTRING so với LEFT trong SQL SERVER

  5. Điều gì xảy ra với một giao dịch không được cam kết khi kết nối bị đóng?