通过编程方式确定哪些SQL Server存储过程实际上使用了特定参数



我有一个SQL Server数据库(它是2012年,但可能是2008年)与数千个存储过程。

我想以编程方式知道哪个存储过程正在接收特定参数companyid,但并没有真正在查询中使用它。

所以这个项目的两个目标是:

  1. 确定哪些存储过程没有接收参数companyid
  2. 识别那些期望参数companyid但在其代码中没有真正使用它的存储过程

我设想要么写一些TSQL或写一个应用程序在c#为了完成任务-任何建议将工作。

所以我希望你们能告诉我最好的方法是什么?

Thanks in advance

==========================================================
基于这两个建议,解决方案如下:

SELECT  Specific_Name,  
        ((len(ROUTINE_DEFINITION) - len(replace(ROUTINE_DEFINITION, '@companyid', '')))/ 10) as COUNT,  
    ROUTINE_DEFINITION  
FROM    INFORMATION_SCHEMA.ROUTINES  
WHERE   ROUTINE_DEFINITION LIKE '%@companyid%'  
ORDER BY 2, 1

注意:字符串替换数除以10将得到该特定字符串在正文中的实例计数。1表示它只是参数,2或更多表示它在正文中使用。

谢谢你们!!

我可以让它听起来很简单。

查看

ROUTINE_DEFINITION字段
select * from INFORMATION_SCHEMA.ROUTINES 

这基本上给出了sp, fn, vw的主体

你的第一个目标可能会实现

SELECT proce.name FROM sys.procedures proce 
INNER JOIN sys.procedures params ON proce .object_id=params.object_id
WHERE params.name='@companyid'

第二个目标你可以试试

SELECT proce.name from sys.procedures proce 
INNER JOIN sys.sql_modules modules on proce.object_id=modules.object_id
WHERE definition like '%@companyid%'

相关内容

最新更新