Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да получа списъка с таблици в съхранената процедура?

Двата отговора с най-голям брой гласове използват много отхвърлени таблици, които трябва да се избягват.
Ето един много по-чист начин да го направите.

Вземете всички таблици, от които зависи една съхранена процедура:

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

Работи с MS SQL SERVER 2005+

Списък с промени:

  • sysdepends трябва да бъде заменен с sys.sql_dependencies
    • Новата таблица използва object_id вместо id
    • Новата таблица използва referenced_major_id вместо depid
  • Използване на sysobjects трябва да бъде заменен с по-фокусирани изгледи на системен каталог
    • Както marc_s посочи, вместо това използвайте sys.tables и sys.procedures
    • Забележка :Това предотвратява необходимостта от проверка къде o.xtype = 'p' (и др.)
  • Освен това наистина няма нужда от CTE, който използва ROW_NUMBER() само за да сме сигурни, че имаме върнат само един от всеки набор от записи. Това е, което DISTINCT има за!

    • Всъщност SQL е достатъчно умен, за да използва DISTINCT зад кулисите.
    • Представям като доказателство:Доказателство А . Следните заявки имат същия план за изпълнение!

      -- 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. Какво означава времеви печат в T-Sql в C#?

  2. datetime срещу datetimeoffset в SQL Server:Каква е разликата?

  3. Отменете оптимизатора на заявки за вашите T-SQL присъединявания с FORCEPLAN

  4. Коя SQL заявка е по-бърза? Филтриране по критерии за присъединяване или клауза Къде?

  5. Как да създадете история ИЛИ да одитирате изгледи от таблици за улавяне на промени (CDC) в SQL Server - урок за SQL Server