标签归档:存储过程参数

mssql sqlserver 存储过程出现“为过程或函数指定了过多的参数”错误信息的原因分析


摘要:
下文讲述sqlserver中,存储过程中的sql脚本出现”为过程或函数指定了过多的参数”错误提示信息的处理方法,如下所示:
实验环境:sql server 2008 R2

为过程或函数指定了过多的参数的原因分析:

原因1:存储过程所需的参数未指定

在调用存储过程,没有为存储过程中必填参数进行赋值,导致运行存储过程时,出现以上的错误提示信息,
解决方法:
为必须存储过程或函数指定相应的参数。

原因2: 存储过程同系统存储过程出现同步,执行的时候会调用系统存储过程

系统自带的存储过程默认以sp开头,
当我们执行一个存储过程时,首先会从master数据开始检查并执行,如果用户自定义的存储过程和系统存储过程名称相同,那么每次执行的时候,都是执行系统存储过程,
用户自定义的存储过程永远得不到执行。
解决方法:
在用户自定义存储过程时,严格使用自己的一套存储过程编码规则,避免出现自定义存储过程和系统存储过程出现同名的情况发生。

原因3:数据库调用错误

执行存储过程所在的数据库发生错误,
例:
执行的存储过程的数据库位于旧版本的系统中
解决方法:
核查执行存储过程所在的数据库的参数和sql脚本中调用的参数个数是否一致

mssql sqlserver 获取存储过程参数信息的方法分享


摘要:
下文讲述使用sqlserver系统对象获取存储过程参数的方法分享,如下所示:
实验环境:sqlserver 2008 R2


由于需要编写一个存储过程通用的参数化生成器,需要获取存储过程中的参数信息,下文将利用系统对象获取存储过程中的参数信息,如下所示:

实现思路:
通过查询系统对象” INFORMATION_SCHEMA.PARAMETERS”,输入响应的架构名称和存储过程名称获取相应的参数信息。

    SELECT PARAMETER_NAME as [参数名称],
     DATA_TYPE as [参数类型],
     ISNULL(CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION) as [长度],
     NUMERIC_SCALE  as [精度],
     PARAMETER_MODE as [参数类型(输入/输出)] 
    FROM INFORMATION_SCHEMA.PARAMETERS
    WHERE SPECIFIC_SCHEMA = '架构名称' AND  SPECIFIC_NAME = '存储过程名称'

-----例:获取pr_maomao存储过程的参数信息
       SELECT PARAMETER_NAME as [参数名称],
              DATA_TYPE as [参数类型],
              ISNULL(CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION) as [长度],
              NUMERIC_SCALE  as [精度],
              PARAMETER_MODE as [参数类型(输入/输出)] 
    FROM INFORMATION_SCHEMA.PARAMETERS
   WHERE SPECIFIC_SCHEMA = 'dbo' AND  SPECIFIC_NAME = 'pr_maomao'