我有一个SQL Server数据库(它是2012年,但可能是2008年)与数千个存储过程。
我想以编程方式知道哪个存储过程正在接收特定参数companyid
,但并没有真正在查询中使用它。
所以这个项目的两个目标是:
- 确定哪些存储过程没有接收参数
companyid
- 识别那些期望参数
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%'