我写了以下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',未提供。
我无法解决此问题。
答案 0 :(得分:1)
这个程序有几个问题。
变量@Reg_ID
的类型为varchar(max)
,其目的是返回新插入的标识值,该值很可能是整数。因此,此变量的数据类型应为INT
@Reg_ID
被称为输入类型参数,因为您在过程内部为其赋值,并且绝对想知道在过程执行完成后它已分配给它的内容,您需要制作它是一个OUTPUT
参数,在过程定义中提到了它旁边的关键字OUTPUT
。
ALTER PROCEDURE [dbo].[usp_M_InsertRegistration]
@Reg_ID INT OUTPUT,
........
@@IDENTITY
系统函数来捕获新插入的标识值的值,@@IDENTITY
将在任何会话中的任何会话中返回新插入的标识值。您需要使用SCOPE_IDENTIT()
函数,该函数仅返回会话/范围中新插入的标识值。