对于给定的存储过程,我想下面的总结 - 列名选择SQL Server脚本来概括一个存储过程
- 表
- 表修改(插入,更新或删除)列名(如果更新)
- 任何子存储过程被调用与上述相同的摘要两点。
- 参数传递
有谁知道这样的T-SQL脚本来概括一个存储过程?
对于给定的存储过程,我想下面的总结 - 列名选择SQL Server脚本来概括一个存储过程
有谁知道这样的T-SQL脚本来概括一个存储过程?
您可以使用sp_help
获取有关该对象的参数和信息。
EXEC sp_help yourProcedure;
然后得到它正在使用的表和列,您可以使用sp_depends
EXEC sp_depends yourProcedure;
Here是列出SQL对象相关
一个有用的链接或者你也可以使用。但仅限于2008年及以上。
SELECT * FROM sys.dm_sql_referenced_entities ('dbo.yourProcedure', 'OBJECT');
SELECT * FROM sys.dm_sql_referencing_entities('dbo.yourProcedure', 'OBJECT');
因为sp_depends
已被弃用。
如果存储过程使用动态sql。那么只有你必须使用:
sp_helptext yourProcedure
这将返回过程的内容。
如果您在存储过程中有Dynamic sql。你可以这样做:
DECLARE @tbl TABLE(Text VARCHAR(MAX))
INSERT INTO @tbl
EXEC sp_helptext yourProcedure
SELECT
sysTables.name
FROM
dbo.sysobjects AS sysTables
WHERE EXISTS
(
SELECT
NULL
FROM
@tbl AS tbl
WHERE
tbl.Text LIKE '%'+sysTables.name+'%'
)
这将返回存储过程中使用的对象。
这会给你存储过程的实际文本,你可以复制并粘贴到另一个查询窗口并进行分析。
sp_helptext yourProcedure
是否有一个方法来确定如果proc包含使用这些动态SQL的使用对象是什么? – wergeld 2012-03-12 13:12:01
更新答案 – Arion 2012-03-12 14:26:31
是的,知道了sp_helptext方法。希望有办法解决这个问题。我们正在重做一个猖獗的动态SQL应用程序。很好地了解一下sp_depends方法。 sys.dm_sql_reference_ *在SQL Server 2005中可用? – wergeld 2012-03-12 14:30:02