Sql server 自动检查存储过程参数和引用表中的不一致性';SQL Server中的s列大小

Sql server 自动检查存储过程参数和引用表中的不一致性';SQL Server中的s列大小,sql-server,stored-procedures,parameters,Sql Server,Stored Procedures,Parameters,在我目前正在工作的项目中,我最初是通过执行多个SQL Server脚本来执行数据库设置 这些脚本将创建表和存储过程。 我有大约300个表和大约1500个存储过程 最近,我发现一些存储过程中定义的参数是使用varchar(max)类型定义的,这导致没有使用索引,并导致性能问题 我现在要做的是检查表中定义的列大小和存储过程中的参数大小之间的所有不一致 我已经开始获取每个表的所有依赖项,然后在脚本文件中搜索存储过程定义并检查所有大小 除了一些过程有20多个参数这一事实之外,检查很容易出错,如果我这样做

在我目前正在工作的项目中,我最初是通过执行多个SQL Server脚本来执行数据库设置

这些脚本将创建表和存储过程。 我有大约300个表和大约1500个存储过程

最近,我发现一些存储过程中定义的参数是使用
varchar(max)
类型定义的,这导致没有使用索引,并导致性能问题

我现在要做的是检查表中定义的列大小和存储过程中的参数大小之间的所有不一致

我已经开始获取每个表的所有依赖项,然后在脚本文件中搜索存储过程定义并检查所有大小

除了一些过程有20多个参数这一事实之外,检查很容易出错,如果我这样做,我将多次介绍一些过程,因为一些过程可能依赖于多个表,我不能只检查
varchar(max)的情况
用于检查定义了大小的情况,但可能与表中的情况不同


有没有一个工具可以帮助我完成这项任务?

这个针对
sys
目录视图的查询可以生成类型为
(n)varchar(max)
的过程及其参数(您可能还需要检查
(n)text
并替换它们-无论如何它们都不推荐使用):


你怎么看?您有@x Varchar(max),它将被记录/搜索到ABC列中/针对ABC列。。。如果您试图与性能作斗争,最好先解决最大的问题。
SELECT
    ProcedureName = pr.name,
    ParameterName = para.name,
    TypeName = t.name,
    ParaMaxLength = para.max_length
FROM    
    sys.procedures pr
LEFT OUTER JOIN 
    sys.all_parameters para ON para.object_id = pr.object_id
LEFT OUTER JOIN 
    sys.types t ON para.system_type_id = t.system_type_id
WHERE
    t.name IN ('varchar', 'nvarchar')
    AND para.max_length = -1