Можем ли мы иметь SQL-запрос, который перечисляет все таблицы, которые не упоминаются ни в каких процедурах в базе данных? - PullRequest
0 голосов
/ 14 декабря 2018

SQL-запрос, в котором будут перечислены все таблицы базы данных, которые не используются ни в каких процедурах.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Гораздо чище, чем тела процедур синтаксического анализа. ИМХО:

SELECT s.name, t.name
  FROM sys.schemas AS s
  INNER JOIN sys.tables AS t
  ON s.[schema_id] = t.[schema_id]
  WHERE NOT EXISTS
  (
    SELECT 1 
      FROM sys.sql_expression_dependencies AS d
      INNER JOIN sys.procedures AS p
      ON d.referencing_id = p.[object_id]
      WHERE d.referenced_id = t.[object_id]
  );

Обратите внимание, что это не будет захватывать хранимые процедуры, которые принимают имена таблиц в качестве параметров или строят их динамически и выполняют как динамический SQL.

0 голосов
/ 14 декабря 2018
select  name into #temp from sys.tables

update #temp 
set name = CONCAT('%',name,'%')

select name into #temp2 from #temp
delete from #temp2


insert into #temp2
SELECT T.Name FROM sys.procedures SP, #temp T
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE T.name

SELECT * FROM #temp
EXCEPT
SELECT * FROM #temp2

drop table #temp
drop table #temp2
...