Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać listę tabel w procedurze składowanej?

Dwie najwyżej głosowane odpowiedzi wykorzystują wiele przestarzałych tabel, których należy unikać.
Oto znacznie czystszy sposób na zrobienie tego.

Pobierz wszystkie tabele, od których zależy procedura składowana:

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

Współpracuje z MS SQL SERVER 2005+

Lista zmian:

  • sysdepends należy zastąpić sys.sql_dependencies
    • Nowa tabela używa object_id zamiast id
    • Nowa tabela używa referenced_major_id zamiast depid
  • Korzystanie z sysobjects należy zastąpić bardziej skoncentrowanymi widokami katalogu systemowego
    • Jak zauważył marc_s, zamiast tego użyj sys.tables i sys.procedures
    • Uwaga :Zapobiega to konieczności sprawdzania, gdzie o.xtype = 'p' (itp.)
  • Ponadto naprawdę nie ma potrzeby stosowania CTE, które używa ROW_NUMBER() tylko aby upewnić się, że zwrócono tylko jeden z każdego zestawu rekordów. To właśnie DISTINCT jest tam!

    • W rzeczywistości SQL jest wystarczająco inteligentny, aby używać DISTINCT za kulisami.
    • Przedstawiam dowody:Dowód A . Następujące zapytania mają ten sam plan wykonania!

      -- 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. tsql zwraca tabelę z funkcji lub procedury magazynu

  2. Jaki jest odpowiednik „tabeli opisowej” w SQL Server?

  3. Jak dodać kolumnę tożsamości do tabeli za pomocą TSQL i GUI w SQL Server - SQL Server / T-SQL Tutorial, część 40

  4. Uzyskaj listę obsługiwanych stref czasowych w SQL Server (T-SQL)

  5. Odpowiednik funkcji Sleep() w SQL Server:instrukcja WAITFOR