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

Bagaimana saya bisa mendapatkan daftar tabel dalam prosedur tersimpan?

Dua jawaban dengan suara terbanyak menggunakan banyak tabel usang yang harus dihindari.
Berikut cara yang lebih bersih untuk melakukannya.

Dapatkan semua tabel tempat prosedur tersimpan bergantung:

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

Bekerja dengan MS SQL SERVER 2005+

Daftar Perubahan:

  • sysdepends harus diganti dengan sys.sql_dependencies
    • Tabel baru menggunakan object_id bukannya id
    • Tabel baru menggunakan referenced_major_id bukannya depid
  • Menggunakan sysobjects harus diganti dengan tampilan katalog sistem yang lebih fokus
    • Seperti yang ditunjukkan marc_s, sebagai gantinya gunakan sys.tables dan sys.procedures
    • Catatan :Ini mencegah keharusan memeriksa di mana o.xtype = 'p' (dll.)
  • Juga, sebenarnya tidak perlu CTE yang menggunakan ROW_NUMBER() hanya untuk memastikan kami hanya memiliki satu dari setiap kumpulan catatan yang dikembalikan. Itulah yang DISTINCT ada untuk!

    • Faktanya, SQL cukup pintar untuk menggunakan DISTINCT di belakang layar.
    • Saya menyerahkan bukti:Exhibit A . Kueri berikut memiliki Rencana Eksekusi yang sama!

      -- 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. Hitung Selisih Waktu Antara Dua Baris

  2. Kesalahan Login SQL Server:Login gagal untuk pengguna 'NT AUTHORITY\SYSTEM'

  3. Bagaimana menemukan kueri berkinerja terburuk di SQL Server 2008?

  4. Grup Ketersediaan AlwaysOn SQL Server:Instalasi dan Konfigurasi. Bagian 2

  5. sisipan massal pyodbc dasar