Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 以编程方式标识实际使用特定参数的SQL Server存储过程_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 以编程方式标识实际使用特定参数的SQL Server存储过程

Sql server 以编程方式标识实际使用特定参数的SQL Server存储过程,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我有一个SQL Server数据库(2012年,但可能是2008年),其中包含数千个存储过程 我想通过编程知道哪个存储过程正在接收特定的参数companyid,但实际上并没有在查询中使用它 因此,本项目的两个目标是: 确定哪些存储过程不接收参数companyid 识别那些确实需要参数companyid但在其代码中没有真正使用该参数的存储过程 我打算要么写一些TSQL,要么用C#写一个应用程序来完成任务——这两个建议都可以 所以我希望听到你们的声音,什么是实现这一目标的最佳方式 提前谢谢 ====

我有一个SQL Server数据库(2012年,但可能是2008年),其中包含数千个存储过程

我想通过编程知道哪个存储过程正在接收特定的参数
companyid
,但实际上并没有在查询中使用它

因此,本项目的两个目标是:

  • 确定哪些存储过程不接收参数
    companyid
  • 识别那些确实需要参数
    companyid
    但在其代码中没有真正使用该参数的存储过程
  • 我打算要么写一些TSQL,要么用C#写一个应用程序来完成任务——这两个建议都可以

    所以我希望听到你们的声音,什么是实现这一目标的最佳方式

    提前谢谢

    ============================================================================
    根据这两项建议,解决方案如下:

    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或更多表示它在主体中使用


    谢谢你们两位

    您的第一个目标可能就是通过这个来实现的

    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%'
    

    我可以让它听起来很简单

    查看
    ROUTINE\u定义

    select * from INFORMATION_SCHEMA.ROUTINES 
    

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

    第一个主体不起作用,因为如果我使用WHERE子句,它返回空。如果我真的将params.name放在SELECT上,它会给出与proce.name相同的确切名称