Я sh, чтобы найти список таблиц в динамическом c запросе внутри хранимых процедур (а их довольно много). Как я могу их найти?
Дополнение к требованию: необходимо извлечь имя базы данных также вместе с именем таблицы.
Ниже приведен пример хранимой процедуры и запрос для поиска таблиц внутри хранимой процедуры. Запрос не возвращает никаких результатов.
Обратите внимание, что я не могу изменить хранимую процедуру как устаревший код.
Администратор моей компании подтвердил, что мы не можем использовать сценарии powershell /.NET в качестве базы данных для разработки / Prod находятся в сети клиента, и это нарушит его политику безопасности.
CREATE OR ALTER PROCEDURE dbo.FindTablesInsideDynamicQuery (@companyID int)
as
begin
DECLARE @dynamicSQL TABLE (id int identity(1,1), line varchar(max))
insert into @dynamicSQL(line)
select 'delete from MCQ.dbo.table1 where companyid = ' + Convert(varchar, @CompanyID) +';'
union
select 'delete from MCQ.dbo.Shares where companyid = ' + Convert(varchar, @CompanyID) +';'
union
select 'delete from MCQ.dbo.ExtremeGames where companyid = ' + Convert(varchar, @CompanyID) +';'
union
select 'delete from MCQ.dbo.Earning where companyid = ' + Convert(varchar, @CompanyID) +';'
union
select 'delete from MCQ.dbo.Fortress where companyid = ' + Convert(varchar, @CompanyID) +';'
union
select 'delete from MCQ.dbo.BlackScholes where companyid = ' + Convert(varchar, @CompanyID) +';'
end
GO
declare @spName varchar(100) = 'FindTablesInsideDynamicQuery'
SELECT distinct
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
FROM
sys.sql_expression_dependencies sed
INNER JOIN sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
where o.name = @spName