返回关于特定数据库的存储过程,表和列

问题描述:

我正在寻找编写一个查询,该查询将返回引用我正在重建的特定数据库的所有存储过程和视图。我还需要查询返回返回的存储过程/视图包含的列名和表名,以引用正在重建的数据库。返回关于特定数据库的存储过程,表和列

我有一个查询现在将返回存储的特效和视图,但在返回引用数据库的列和表名称不成功。

SELECT Distinct so.Name, so.type--, sc.text 
FROM sysobjects so(NOLOCK) 
INNER JOIN syscomments sc (NOLOCK) on so.Id = sc.ID 

WHERE so.Type in('p' , 'v') 
AND sc.Text LIKE '%membership_dw.%' 
ORDER BY so.Name 

Membership_DW是当前存储存储过程和视图的数据库的名称,它也是正在重新创建的数据库。

+0

。但是你应该小心地把NOLOCK提示扔到各处。这比大多数人意识到的要凶险得多。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –

+0

也许你需要看看sys.sysdepends? https://docs.microsoft.com/en-us/sql/relational-databases/system-compatibility-views/sys-sysdepends-transact-sql –

+0

我需要引用此数据库/表/列的sp/views,因为它们将不得不被重写为指向新的数据库。 Membership_DW中有很多存储过程,根本没有引用Membership_DW数据库。我会玩弄sysdepends,看看我能从中得到什么,谢谢! –

这里是一个快速和肮脏的查询我有一个很难理解你正在尝试做的去做

;WITH cte as(
select * 
from sys.sysdepends t1 
inner join sys.objects t2 on t1.depid = t2.object_id 
where t2.type = 'U' and is_ms_shipped = 0) 
SELECT t5.name as SP_NAME, t6.name as TBL_NAME, t9.name COLNAME from   sys.objects t5 
INNER JOIN cte t6 on t6.id = t5.object_id 
INNER JOIN sys.columns t9 on t6.object_id = t9.object_id 
where t5.is_ms_shipped = 0 and t6.name not like 'sys%' 
order by sp_name, TBL_NAME