过程或函数的参数过多 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,我认为这样可以