--但其实不太保险。
-------------------------------------------------------------------------------------------
--示例1(可以复制以下语句在查询分析器中试验):
--创建存储过程,里面调用另一个存储过程,但被调用的存储过程未被创建
create procedure UseOthers
as
begin
exec UseMe 'a'--暂时不存在UseMe这个存储过程
end
--查看引用--结果
sp_depends UseOthers--Object does not reference any object, and no objects reference it.
sp_depends UseMe--error:The object 'UseMe' does not exist in database 'test' or is invalid for this operation.
--之后补充这个被调用的存储过程
create procedure UseMe
@flag nvarchar(50)
as
begin
select @flag
end
--查看引用--结果
sp_depends UseOthers--Object does not reference any object, and no objects reference it.
sp_depends UseMe--Object does not reference any object, and no objects reference it.
--可见sp_depends不支持后面补充的引用依赖
--(通过手工界面操作查看View Dependencis也是看不到后面补充的引用依赖)
--这里演示了存储过程的调用,其他对象的引用也是一样的,比如函数,表等
--drop procedure UseOthers
--drop procedure UseMe
-------------------------------------------------------------------------------------------
--场景2:
--创建存储过程
create procedure UseMe
@flag nvarchar(50)
as
begin
select @flag
end
--创建存储过程,里面通过字符串动态调用另一个存储过程
create procedure UseOthers
as
begin
declare @sql nvarchar(4000)
set @sql='UseMe ''a'''--这里用到了另一个存储过程
exec(@sql)--动态调用
end
--查看引用--结果
sp_depends UseOthers--Object does not reference any object, and no objects reference it.
sp_depends UseMe--Object does not reference any object, and no objects reference it.
--可见sp_depends不支持动态创建(或运行时)的引用依赖
--(通过手工界面操作查看View Dependencis也是看不到动态创建(或运行时)的引用依赖)
--这里演示了存储过程的调用,其他对象的引用也是一样的,比如函数,表等
--drop procedure UseOthers
--drop procedure UseMe
--总结2:sp_depends不支持动态创建(或运行时)的引用依赖
--所以,仅仅通过这种方式来断定依赖关系,是不安全的。
浙公网安备 33010602011771号