2012-03-12 78 views
3

对于给定的存储过程,我想下面的总结 - 列名选择SQL Server脚本来概括一个存储过程

  • 表修改(插入,更新或删除)列名(如果更新)
  • 任何子存储过程被调用与上述相同的摘要两点。
  • 参数传递

有谁知道这样的T-SQL脚本来概括一个存储过程?

回答

3

您可以使用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+'%' 
    ) 

这将返回存储过程中使用的对象。

+0

是否有一个方法来确定如果proc包含使用这些动态SQL的使用对象是什么? – wergeld 2012-03-12 13:12:01

+0

更新答案 – Arion 2012-03-12 14:26:31

+0

是的,知道了sp_helptext方法。希望有办法解决这个问题。我们正在重做一个猖獗的动态SQL应用程序。很好地了解一下sp_depends方法。 sys.dm_sql_reference_ *在SQL Server 2005中可用? – wergeld 2012-03-12 14:30:02

0

这会给你存储过程的实际文本,你可以复制并粘贴到另一个查询窗口并进行分析。

sp_helptext yourProcedure