【问题标题】:Parsing stored procedures解析存储过程
【发布时间】:2011-12-07 17:35:43
【问题描述】:

有没有办法扫描 SQL Server 以查找所有存储过程、读取它们的主体并确定它们使用的表列表?我的目的是对大型遗留数据库进行分析。 (SQL Server 2008R2,最好是 C#,但语言在很大程度上无关紧要。)

【问题讨论】:

  • 也许在这里回答? stackoverflow.com/questions/1916489/…
  • 这里 cmets 中的一些提示:forums.asp.net/t/1225902.aspx 我们在数据库中做了类似的事情,尽管我们已经修改它以使用一些专有代码,所以我不能发布它。我们的版本允许我们搜索服务器上的所有数据库,或者只搜索我们使用变量发送的数据库。 .

标签: sql stored-procedures sql-server-2008-r2


【解决方案1】:

利用 SQL Server 的 sp_depends 系统存储过程。

  1. 获取所有存储过程的列表。
select  specific_name   from information_schema.routines
where routine_type='PROCEDURE' and specific_name not like 'sp_%'
  1. 将此列表与sp_depends 一起使用,并将其结果插入到表格中。
declare @t table([name] varchar(50),[type] varchar(50),
updated varchar(10),selected varchar(10),[column] varchar(50))

insert into @t exec sp_depends 'MyProc1';
insert into @t exec sp_depends 'MyProc2';
insert into @t exec sp_depends 'MyProc3';

select [name] from @t group by [name];

More on sp_depends

【讨论】:

  • 这对于跨数据库依赖来说并不是 100% 有效。
  • @JNK :我错过了 OP 想要跨数据库功能的部分。
  • 他没有提到,但我想指出sp_depends 不会准确报告跨数据库的依赖关系。
【解决方案2】:

不确定这是否有帮助,但您可以在 SQL Management StudioObject Explorer 中右键单击任何数据库并使用 Tasks --> Generate Scripts 生成一个包含所有存储过程(或任何对象)的主体的大型脚本。那时,它只是一个文本文件,您可以根据需要解析任何内容。

【讨论】:

  • 我的印象是 OP 想要一种自动化或半自动化的方式来跨大型数据库执行此操作,这听起来有点麻烦......
  • 她的第一句话暗示了多个数据库,但是她接着提到了一个大型数据库——“我的目的是对大型遗留数据库进行分析。”因为我知道一个事实,这种方法适用于单个数据库而不会很麻烦,我想我会建议它。
【解决方案3】:

我认为这可能有效:

选择 例程名称, 例程定义 FROM information_schema.routines WHEREroutine_definition in (SELECT '%' +name+ '%' FROM sys.tables) ANDroutine_type IN ('function', 'pocedure')

【讨论】:

    【解决方案4】:

    前两点是肯定的:

    SELECT
       pr.Name,
       mod.Definition
    FROM sys.procedures pr
    INNER JOIN sys.sql_modules mod ON pr.object_id = mod.object_id
    

    一旦你有了存储的过程体(在sql_modules,列definition),你就可以解析它 - 但这充其量会有点混乱 - 不确定是否有更方便的方法来做到这一点.. .

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多