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

Làm cách nào để lấy danh sách các bảng trong thủ tục được lưu trữ?

Hai câu trả lời được bình chọn cao nhất sử dụng nhiều bảng không được dùng nữa nên tránh.
Đây là một cách dễ dàng hơn để làm điều đó.

Nhận tất cả các bảng mà một thủ tục được lưu trữ phụ thuộc vào:

SELECT DISTINCT p.name AS proc_name, t.name AS table_name
FROM sys.sql_dependencies d 
INNER JOIN sys.procedures p ON p.object_id = d.object_id
INNER JOIN sys.tables     t ON t.object_id = d.referenced_major_id
ORDER BY proc_name, table_name

Hoạt động với MS SQL SERVER 2005+

Danh sách các thay đổi:

  • sysdepends nên được thay thế bằng sys.sql_dependencies
    • Bảng mới sử dụng object_id thay vì id
    • Bảng mới sử dụng referenced_major_id thay vì depid
  • Sử dụng sysobjects nên được thay thế bằng các chế độ xem danh mục hệ thống tập trung hơn
    • Như marc_s đã chỉ ra, thay vào đó hãy sử dụng sys.tablessys.procedures
    • Lưu ý :Điều này tránh phải kiểm tra vị trí o.xtype = 'p' (v.v.)
  • Ngoài ra, thực sự không cần CTE sử dụng ROW_NUMBER() chỉ để đảm bảo rằng chúng tôi chỉ có một trong mỗi tập hợp bản ghi được trả về. Đó là những gì DISTINCT ở đó cho!

    • Trên thực tế, SQL đủ thông minh để sử dụng DISTINCT đằng sau hậu trường.
    • Tôi gửi bằng chứng: Phụ lục A . Các truy vấn sau có cùng một Kế hoạch thực thi!

      -- Complex
      WITH MyPeople AS (
        SELECT id, name,
        ROW_NUMBER() OVER(PARTITION BY id, name ORDER BY id, name) AS row
        FROM People)
      SELECT id, name
      FROM MyPeople
      WHERE row = 1
      
      -- Better
      SELECT DISTINCT id, name
      FROM People
      


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả lại tất cả các nhóm tệp cho cơ sở dữ liệu hiện tại trong SQL Server

  2. Cài đặt SQL Server 2017

  3. Các phương pháp tốt nhất để chạy tổng - được cập nhật cho SQL Server 2012

  4. Làm thế nào để ghi bằng BCP vào một SQL Server từ xa?

  5. Các câu trả lời hàng đầu cho 5 câu hỏi nhức nhối về hàm COALESCE trong SQL Server