过程或函数的参数过多 SQL 服务器
Procedure or function has too many arguments SQL server
我在 SQL 服务器中执行存储过程时遇到此错误:
Msg 8144, Level 16, State 2, Procedure sp_adduser, Line 2
Procedure or function sp_adduser has too many arguments specified.
奇怪的是,参数的个数和过程中声明的一样,即使我在执行它的同时右键单击过程并按执行,从字段中输入参数,仍然是同样的错误.
这是程序和执行程序的代码:
create procedure [dbo].[sp_addUser]
(
@userID nvarchar(50),
@pw nvarchar(50),
@fName nvarchar(50),
@lname nvarchar(50),
@email nvarchar(150),
@address nvarchar(150),
@city int,
@country int,
@phone nvarchar(50),
@gender nvarchar(10),
@dob date,
@photo nvarchar(150),
@secq int,
@secAnswer nvarchar(150),
@completed int output)
as
declare @found int
/*
usertype:
0 - Administrator
1 - User
*/
begin
begin
select @found=count(*) from registration r
where REPLACE(r.firstname,' ','')=REPLACE(@fName,' ','')
and REPLACE(r.lastname,' ','')=REPLACE(@lname,' ','')
and r.dateofbirth=@dob;
end
begin
if @found=0
begin
begin
insert into Login values(@userID,@pw,0,1);
end
begin
insert into registration values(
@userID,@fName,@lname,@email,
@address,@city,@country,@phone,
@gender,@dob,@photo,@secq,@secAnswer
)
end
begin
set @completed=1;
end
end
else set @completed=0
end
return @completed
end
这是执行官:
DECLARE @return_value int,
@completed int
SELECT @completed = 0
EXEC @return_value = [dbo].[sp_addUser]
@userID = N'a',
@pw = N'a',
@fName = N'a',
@lname = N'a',
@email = N'a',
@address = N'a',
@city = 1,
@country = 1,
@phone = N'a',
@gender = N'a',
@dob = '01/01/2000',
@photo = N'a',
@secq = 1,
@secAnswer = N'a',
@completed = @completed OUTPUT
SELECT @completed as N'@completed'
SELECT 'Return Value' = @return_value
提前致谢!
你实际调用的是系统存储过程sp_adduser. The "sp_" prefix is special and has its own rules on resolution,不建议使用。如果您想使用自己的前缀,无论您做什么,都不要使用 "sp_".
根据@marc_s,即使您的存储过程不与现有系统存储过程冲突,您仍然会由于缓存未命中而得到 noticeable performance hit。
sp_adduser 是一个内置于 SQL 服务器的过程 - 请参阅 https://msdn.microsoft.com/en-us/library/ms181422.aspx
Don't use the sp_ prefix for your own stored procedures,也许可以叫它 proc_adduser,我认为这样可以
我在 SQL 服务器中执行存储过程时遇到此错误:
Msg 8144, Level 16, State 2, Procedure sp_adduser, Line 2
Procedure or function sp_adduser has too many arguments specified.
奇怪的是,参数的个数和过程中声明的一样,即使我在执行它的同时右键单击过程并按执行,从字段中输入参数,仍然是同样的错误.
这是程序和执行程序的代码:
create procedure [dbo].[sp_addUser]
(
@userID nvarchar(50),
@pw nvarchar(50),
@fName nvarchar(50),
@lname nvarchar(50),
@email nvarchar(150),
@address nvarchar(150),
@city int,
@country int,
@phone nvarchar(50),
@gender nvarchar(10),
@dob date,
@photo nvarchar(150),
@secq int,
@secAnswer nvarchar(150),
@completed int output)
as
declare @found int
/*
usertype:
0 - Administrator
1 - User
*/
begin
begin
select @found=count(*) from registration r
where REPLACE(r.firstname,' ','')=REPLACE(@fName,' ','')
and REPLACE(r.lastname,' ','')=REPLACE(@lname,' ','')
and r.dateofbirth=@dob;
end
begin
if @found=0
begin
begin
insert into Login values(@userID,@pw,0,1);
end
begin
insert into registration values(
@userID,@fName,@lname,@email,
@address,@city,@country,@phone,
@gender,@dob,@photo,@secq,@secAnswer
)
end
begin
set @completed=1;
end
end
else set @completed=0
end
return @completed
end
这是执行官:
DECLARE @return_value int,
@completed int
SELECT @completed = 0
EXEC @return_value = [dbo].[sp_addUser]
@userID = N'a',
@pw = N'a',
@fName = N'a',
@lname = N'a',
@email = N'a',
@address = N'a',
@city = 1,
@country = 1,
@phone = N'a',
@gender = N'a',
@dob = '01/01/2000',
@photo = N'a',
@secq = 1,
@secAnswer = N'a',
@completed = @completed OUTPUT
SELECT @completed as N'@completed'
SELECT 'Return Value' = @return_value
提前致谢!
你实际调用的是系统存储过程sp_adduser. The "sp_" prefix is special and has its own rules on resolution,不建议使用。如果您想使用自己的前缀,无论您做什么,都不要使用 "sp_".
根据@marc_s,即使您的存储过程不与现有系统存储过程冲突,您仍然会由于缓存未命中而得到 noticeable performance hit。
sp_adduser 是一个内置于 SQL 服务器的过程 - 请参阅 https://msdn.microsoft.com/en-us/library/ms181422.aspx
Don't use the sp_ prefix for your own stored procedures,也许可以叫它 proc_adduser,我认为这样可以