SQL Server 2008错误201 - 过程期望参数

时间:2015-08-24 13:58:22

标签: sql-server sql-server-2008

我写了以下USP:

ALTER PROCEDURE [dbo].[usp_M_InsertRegistration]
    @Reg_ID varchar(max),
    @Reg_UserID varchar(max),
    @Reg_Password varchar(max) ,
    @Reg_UserName varchar(max) ,
    @Reg_ContactNo varchar(max),
    @Reg_EmailId varchar(max) ,
    @City_ID varchar(max) ,
    @City_StateID varchar(max) ,
    @City_CountryID varchar(max) ,
    @Reg_SecurityQuestion varchar(max),
    @Reg_Answer varchar(max) ,
    @Reg_IsActive varchar(max) ,
    @Reg_Remark varchar(max) ,
    @Reg_CVPath varchar(max) ,
    @CreatedBy varchar(max) ,
    @CreatedDate varchar(max),
    @ModifiedBy varchar(max) ,
    @ModifiedDate varchar(max)
AS
BEGIN
    DECLARE @OutMsg VARCHAR(Max)
    DECLARE @intErrorCode INT

    IF EXISTS (SELECT 1 FROM M_Registration WHERE Reg_UserId = @Reg_UserID)--AND CreatedBy = @CreatedBy)
    BEGIN
            SET @OutMsg = 'false'
    END
    ELSE
    BEGIN
        INSERT INTO M_Registration(
            Reg_UserID,
            Reg_Password,
            Reg_UserName,
            Reg_ContactNo,
            Reg_EmailId,
            City_ID,
            City_StateID,
            City_CountryID,
            Reg_SecurityQuestion,
            Reg_Answer,
            Reg_IsActive,
            Reg_Remark,
            Reg_CVPath,
            CreatedBy,
            CreatedDate)
        VALUES(
            @Reg_UserID,
            @Reg_Password,
            @Reg_UserName,
            @Reg_ContactNo,
            @Reg_EmailId,
            @City_ID,
            @City_StateID,
            @City_CountryID,
            @Reg_SecurityQuestion,
            @Reg_Answer,
            @Reg_IsActive,
            @Reg_Remark,
            @Reg_CVPath,
            @CreatedBy,
            GETDATE())
        SET @Reg_ID = @@IDENTITY
        END
END
GO

尝试通过SQL Server执行存储过程进行测试时,会显示错误:

  

Msg 201,Level 16,State 4,Procedure usp_M_InsertRegistration,Line 0
  程序或功能' usp_M_InsertRegistration'期望参数   ' @ Reg_ID',未提供。

我无法解决此问题。

1 个答案:

答案 0 :(得分:1)

这个程序有几个问题。

  1. 变量@Reg_ID的类型为varchar(max),其目的是返回新插入的标识值,该值很可能是整数。因此,此变量的数据类型应为INT

  2. @Reg_ID被称为输入类型参数,因为您在过程内部为其赋值,并且绝对想知道在过程执行完成后它已分配给它的内容,您需要制作它是一个OUTPUT参数,在过程定义中提到了它旁边的关键字OUTPUT

    ALTER PROCEDURE [dbo].[usp_M_InsertRegistration]
          @Reg_ID INT OUTPUT,
           ........
    
  3. 您正在使用@@IDENTITY系统函数来捕获新插入的标识值的值,@@IDENTITY将在任何会话中的任何会话中返回新插入的标识值。您需要使用SCOPE_IDENTIT()函数,该函数仅返回会话/范围中新插入的标识值。