在SQL Server存储过程中查找数据类型不匹配

时间:2015-07-13 13:04:14

标签: sql sql-server stored-procedures sql-server-2012

我有一个名为MyProc1的存储过程。大多数变量的数据类型与其源表的数据类型匹配,但有一些不匹配。

有没有找到不匹配变量的有效方法?

现在我手动获取表的描述并将其与我的变量数据类型进行比较,但这是一项耗时的任务,因为我必须检查大约500个存储过程。

1 个答案:

答案 0 :(得分:2)

输入参数很容易找到,借用来自另一个堆栈交换answer的查询:

select  
   'Parameter_name' = name,  
   'Type'   = type_name(user_type_id),  
   'Proc_Name' = object_name(object_id),
   'Length'   = max_length,  
   'Prec'   = case when type_name(system_type_id) = 'uniqueidentifier' 
              then precision  
              else OdbcPrec(system_type_id, max_length, precision) end,  
   'Scale'   = OdbcScale(system_type_id, scale),  
   'Param_order'  = parameter_id,  
   'Collation'   = convert(sysname, 
                   case when system_type_id in (35, 99, 167, 175, 231, 239)  
                   then ServerProperty('collation') end)  

  from sys.parameters

但是,无法通过这种方式访问​​过程中声明的参数,以找到需要在过程本身内搜索的参数:

  select OBJECT_NAME(id) as ProcName,  SUBSTRING(text, CHARINDEX('Declare @',text), 250) as DeclaredVarables
  from SYSCOMMENTS
  where CHARINDEX('Declare @',text) > 0
  order by OBJECT_NAME(id), CHARINDEX('Declare @',text)

这将为您提供程序名称和(希望)程序的相关位。您可能必须根据编码标准拨入子字符串,但这应该为您提供程序中声明的参数列表。