SQLServer : 저장 프로 시저 내에서 참조하는 저장 프로 시저를 추출 할 때 빠졌습니다.
4550 단어 SQLServer
배경
sys.sql_expression_dependencies이라는 테이블을 사용하면 특정 저장 프로 시저에서 참조하는 테이블과 EXECUTE하는 저장 프로 시저를 자동으로 추출 할 수 있습니다.
다음 쿼리를 실행하여 저장 프로 시저 내에서 실행중인 저장 프로 시저를 나열 할 수 있는지 시도해 보았지만 작동하지 않았습니다.
select *
from sys.sql_expression_dependencies as sd
inner join sys.objects as o on o.object_id = sd.referenced_id
and type = 'P'
데이터를 확인하면 referenced_id가 NULL이므로 본 거동을 조사해 보았습니다.
조사 결과
문서를 보면 referenced_id는
참조할 엔티티의 ID. 스키마 바인드 참조의 경우이 열의 값은 NULL이 아닙니다.
되어 있습니다.
「스키마 바인드」의 의미를 취하지 않겠습니다만, 아마 「스키마 지정까지 하고 있는지 어떤지」라고 생각해, 이하의 실험을 해 보았습니다.
create proc proc111
as
begin
select 1
end
go
--スキーマバインドなし
create proc proc222
as
begin
exec proc111
end
go
--スキーマバインドあり
create proc proc333
as
begin
exec dbo.proc111
end
스키마 바인딩이없는 경우 종속성 추출 결과
select *
from sys.sql_expression_dependencies as sd
where referencing_id = object_id('proc222')
스키마 바인드가있는 경우 종속성 추출 결과
select *
from sys.sql_expression_dependencies as sd
where referencing_id = object_id('proc333')
스키마 바인딩이 있으면 referenced_id를 얻을 수있었습니다.
스키마 바인딩이 없는 저장 프로시저를 참조하는 경우 sys.sql_expression_dependencies를 사용할 때 referenced_id 대신 referenced_entity_name을 사용할 수 있습니다.
※ sql_dependencies 이면 취득할 수 있는 것 같습니다만, 비추천의 테이블이 되고 있습니다.
Reference
이 문제에 관하여(SQLServer : 저장 프로 시저 내에서 참조하는 저장 프로 시저를 추출 할 때 빠졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/maaaaaaaa/items/a03852670a4f2cfec90a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
select *
from sys.sql_expression_dependencies as sd
inner join sys.objects as o on o.object_id = sd.referenced_id
and type = 'P'
문서를 보면 referenced_id는
참조할 엔티티의 ID. 스키마 바인드 참조의 경우이 열의 값은 NULL이 아닙니다.
되어 있습니다.
「스키마 바인드」의 의미를 취하지 않겠습니다만, 아마 「스키마 지정까지 하고 있는지 어떤지」라고 생각해, 이하의 실험을 해 보았습니다.
create proc proc111
as
begin
select 1
end
go
--スキーマバインドなし
create proc proc222
as
begin
exec proc111
end
go
--スキーマバインドあり
create proc proc333
as
begin
exec dbo.proc111
end
스키마 바인딩이없는 경우 종속성 추출 결과
select *
from sys.sql_expression_dependencies as sd
where referencing_id = object_id('proc222')
스키마 바인드가있는 경우 종속성 추출 결과
select *
from sys.sql_expression_dependencies as sd
where referencing_id = object_id('proc333')
스키마 바인딩이 있으면 referenced_id를 얻을 수있었습니다.
스키마 바인딩이 없는 저장 프로시저를 참조하는 경우 sys.sql_expression_dependencies를 사용할 때 referenced_id 대신 referenced_entity_name을 사용할 수 있습니다.
※ sql_dependencies 이면 취득할 수 있는 것 같습니다만, 비추천의 테이블이 되고 있습니다.
Reference
이 문제에 관하여(SQLServer : 저장 프로 시저 내에서 참조하는 저장 프로 시저를 추출 할 때 빠졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/maaaaaaaa/items/a03852670a4f2cfec90a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)