2013-05-14 29 views
0
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 

錯誤:SQL Server期望參數,其中未在存儲過程中供給

SQL存儲過程需要參數,但未提供。

我得到這個錯誤,我真的不明白它的錯在哪裏。請儘量詳細。

我不知道哪個參數不提供,我應該如何修復它

+6

你可以發佈你用來調用這個存儲過程的代碼嗎? – David

+0

SQl Server有一些稱爲Profiler的東西,它將捕獲執行proc的sql調用。我假設大多數數據庫都有一些他們可以使用的性能分析應用程序。如果你捕獲執行proc的請求,你可能會看到什麼是worng。 – HLGEM

+0

大衛問正確的問題,但我會冒險猜測。 OUT參數可能未提供。但是錯誤消息不會指定哪個參數丟失?你使用的是什麼版本的SQL Server? – Tim

回答

1

你的存儲過程需要五個參數:

  1. @i_guild_code VARCHAR(10)
  2. @i_character_name VARCHAR( 40)
  3. @i_peerage_code VARBINARY(1)
  4. @o_sp_rtn INT OUTPUT
  5. @ 2mx_u ser_no varchar(50)

它們都沒有被過程提供默認值。您的調用代碼必須在的sql命令中提供這些參數。

如果您是從.NET類調用此類,則應確保所有參數都包含在SqlCommand中。這裏有一個相關的問題:

What's the best method to pass parameters to SQLCommand?

請務必設置如果直接運行它們使用SQL腳本的SqlParameter

.Direction屬性,你需要明確包括你執行的呼叫後您的參數。有關示例,請參見MSDN Article

+0

我得到錯誤當我在調用代碼中添加@ 2mx_user_no參數 –

+0

時,請確保設置'.Direction'屬性。 – Matthew

相關問題