我有一个名为MyProc1
的存储过程。大多数变量的数据类型与其源表的数据类型匹配,但有一些不匹配。
有没有找到不匹配变量的有效方法?
现在我手动获取表的描述并将其与我的变量数据类型进行比较,但这是一项耗时的任务,因为我必须检查大约500个存储过程。
答案 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)
这将为您提供程序名称和(希望)程序的相关位。您可能必须根据编码标准拨入子字符串,但这应该为您提供程序中声明的参数列表。