Sql server SQL Server存储过程需要未提供的参数

Sql server SQL Server存储过程需要未提供的参数,sql-server,tsql,Sql Server,Tsql,存储过程中的错误: SQL存储过程需要未提供的参数 我犯了这个错误,我真的不明白是什么错了。请尽量说得非常详细 我不知道哪个参数没有提供,我应该如何修复它您的存储过程需要五个参数: @i_帮会_代码VARCHAR10 @i_character_name VARCHAR40 @i_贵族代码VARBINARY1 @o_sp_rtn INT输出 @2mx用户号varchar50 过程没有为它们提供默认值。调用代码必须在其sql命令中提供这些参数 如果您是从.NET类调用此函数,则应确保所有参数都包含在

存储过程中的错误:

SQL存储过程需要未提供的参数

我犯了这个错误,我真的不明白是什么错了。请尽量说得非常详细


我不知道哪个参数没有提供,我应该如何修复它

您的存储过程需要五个参数:

@i_帮会_代码VARCHAR10 @i_character_name VARCHAR40 @i_贵族代码VARBINARY1 @o_sp_rtn INT输出 @2mx用户号varchar50 过程没有为它们提供默认值。调用代码必须在其sql命令中提供这些参数

如果您是从.NET类调用此函数,则应确保所有参数都包含在。以下是一个相关问题:

确保设置的.Direction属性


如果直接使用sql脚本运行它们,则需要在执行调用后显式地包含参数。有关示例,请参见。

能否发布用于调用此存储过程的代码?SQl Server有一个名为探查器的工具,它将捕获执行过程的SQl调用。我假设大多数数据库都有某种类型的分析应用程序可以使用。如果您捕获了执行proc的请求,您可能会马上看到正在发生的事情。David提出了正确的问题,但我将冒险进行猜测。可能未提供OUT参数。但是错误消息不会指定缺少哪个参数吗?您使用的是哪个版本的SQL Server?如果您使用原始ADO.NET来调用此函数,我猜您缺少command.CommandType=CommandType.storedProcess;SqlCommand的赋值…在调用代码中,确保设置了.Direction属性。
CREATE   PROCEDURE dbo.SP_GUILD_CHAR_CREATE 
    @i_guild_code           VARCHAR(10)     ,   --길드코드
    @i_character_name       VARCHAR(40)     ,   --캐릭터명
    @i_peerage_code         VARBINARY(1)    ,   --작위코드
    @o_sp_rtn               INT     OUTPUT  ,   --실행결과
             @2mx_user_no           varchar(50)

AS
DECLARE 
    @v_max_char_cnt         int,        --한길드당 최대 길드원 수
    @v_row_cnt              int
BEGIN   
    SET NOCOUNT ON
    SET @o_sp_rtn = -1
    SET @v_max_char_cnt = 50

    --입력값 검증
    IF  @i_guild_code IS NULL       OR 
        @i_character_name IS NULL   OR
        @i_peerage_code IS NULL     BEGIN
        SET NOCOUNT OFF
        SET @o_sp_rtn = -1
        RETURN
    END

    --길드중복가입 검사.
    IF EXISTS(  SELECT  1
                FROM    dbo.GUILD_CHAR_INFO WITH(NOLOCK)
                WHERE   character_name = @i_character_name )
    BEGIN
        SET NOCOUNT OFF
        SET @o_sp_rtn = -2
        RETURN
    END

    --한길드당 최대 길드원 수 검증
    SELECT  @v_row_cnt = count(*)
    FROM    dbo.GUILD_CHAR_INFO WITH(NOLOCK)
    WHERE   guild_code = @i_guild_code 
    IF @@Error <> 0 BEGIN
        SET NOCOUNT OFF
        SET @o_sp_rtn = -3
        RETURN
    END

    IF @v_max_char_cnt <= @v_row_cnt BEGIN
        SET NOCOUNT OFF
        SET @o_sp_rtn = -4
        RETURN
    END

    --길드원 등록

SET @2mx_user_no = (SELECT user_no FROM user_character 
WHERE character_name = @i_character_name)

    BEGIN TRAN
    INSERT INTO dbo.GUILD_CHAR_INFO
          (
            guild_code          ,
            character_name      ,
            peerage_code        ,
            ipt_time            ,
            upt_time                           ,
                                        user_no             
          )
    VALUES(
            @i_guild_code           ,
                                        @2mx_user_no        ,
            @i_character_name               ,
            ISNULL(CAST(@i_peerage_code AS smallint), 9)        ,
            getdate()                       ,
            getdate()
          )
    IF @@Error <> 0 
    BEGIN
        ROLLBACK TRAN
        SET NOCOUNT OFF
        SET @o_sp_rtn = -9
        RETURN 
    END

COMMIT TRAN
SET NOCOUNT OFF
SET @o_sp_rtn = 0
END
GO