我适应上面的SQL Server 2012(THX @gvee)我的查询。
select o.name, ref.name, refc.name, *
from sys.sql_expression_dependencies d
inner join sys.objects o on o.object_id = d.referencing_id
inner join sys.objects ref on d.referenced_id = ref.object_id
left outer join sys.columns refc
on d.referenced_id = refc.object_id
and d.referenced_minor_id = refc.column_id
order by 1, 2, 3
select o.name, OBJECT_SCHEMA_NAME(o.object_id), *
from sys.objects o
where o.type = 'P' and o.name not in ('sp_upgraddiagrams')
and not exists (
select 1
from sys.dm_sql_referenced_entities(
OBJECT_SCHEMA_NAME(o.object_id) + '.' + o.name, 'OBJECT')
where is_updated = 1
)
order by 1
注意sys.dm_sql_referenced_entities
不会在SQL 2008
查询sp_upgraddiagrams
会引发错误返回is_updated
列,但仍返回结果集。
不会尝试只写miserablly的方法无法执行INSERT/UPDATE吗? –
@TomerW并不总是这样:http://msdn.microsoft.com/en-us/library/ms181362.aspx - 虽然有很好的建议;你可以遍历'TRY ... CATCH'中的所有对象并记录失败/成功。 – gvee
@TomerW - 否。如果您将'EXEC'授予存储过程,则可以应用所有权链接,这意味着它不会检查基表上的权限。 –