2011-10-26 3 views
0
ALTER PROCEDURE [dbo].[STL_ADDNEWROLE](@ROLENAME VARCHAR(100), @STATUS BIT) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    IF(@ROLENAME IS NULL OR @STATUS IS NULL) 
    BEGIN 
     RETURN 0 
    END 
    ELSE 
    BEGIN 
     IF EXISTS (SELECT [RoleName], [Status] FROM ST_Roles 
        WHERE [RoleName] = @ROLENAME) 
     BEGIN 
      RETURN 0 
     END 
     ELSE IF(@ROLENAME IS NOT NULL) 
     BEGIN 
      INSERT INTO ST_Roles ([RoleName], [Status]) VALUES(@ROLENAME, @STATUS) 
      RETURN 1 
     END 
    END 
END 

上記は私のストアドプロシージャです。 NULL値が渡されると0を返します.1つの値が渡され、別の値が渡されない場合でも、レコードを挿入する代わりに0が返されます。null値がデータを保存した後でもストアドプロシージャ

本当にありがとうございます。

+0

あなたは何をしたいですか?現在のところ、いずれかがnullの場合は0を返し、代わりに何をしたいですか? –

+0

何が問題なのですか?パラメータのデフォルト値を設定してください。 – hgulyan

+0

私のコンピュータでは、これはあなたが記述しているように動作します。多分私はその質問を理解していないでしょうか?いずれかの値が 'null'の場合は' 0'を返し、 'RoleName'がすでに存在する場合は' 0'も返します。 'RoleName'がnullでなく、' Status'がnullでなく、 'RoleName'がすでに存在していないときに' 1'を返します。これは達成しようとしているものとはどのように違いますか? –

答えて

0

問題を説明する前に、私は推測しています。私は問題がデフォルトのパラメータにあると思います。たぶんパラメータを渡さないか空の文字列を渡すので、この方法を試してみてください。

ALTER PROCEDURE [dbo].[STL_ADDNEWROLE](
       @ROLENAME VARCHAR(100) = NULL, 
       @STATUS BIT = NULL) 
     AS 
     BEGIN 
      SET NOCOUNT ON; 
      IF(ISNULL(@ROLENAME, '') = '' OR @STATUS IS NULL) 
       BEGIN 
        RETURN 0 
       END 
      ELSE 
       BEGIN 
        IF EXISTS (SELECT [RoleName],[Status] from ST_Roles where [RoleName] = @ROLENAME) 
         BEGIN 
          RETURN 0 
         END 
        ELSE IF(@ROLENAME IS NOT NULL) 
         BEGIN 
          INSERT INTO ST_Roles ([RoleName],[Status]) VALUES(@ROLENAME,@STATUS) 
          RETURN 1 
         END 
       END 


     END 
+0

これで問題なく動作します。あなたがしたように値を割り当てることが必須であると私に言うことができますか? – Tan

+0

オプションパラメータがある場合のみ。詳細については、リンクを確認してください – hgulyan

+0

http://blog.tech-cats.com/2008/01/using-optional-parameters-in-sql-server.html http://geekswithblogs.net/whiletrue/archive/2009/ 02/28/optional-parameters-in-sql-stored-procedures.aspx – hgulyan

関連する問題