хранимая процедура даже после нулевого значения сохраняет данные

#sql-server #stored-procedures #optional-parameters

#sql-server #хранимые процедуры #необязательно-параметры

Вопрос:

 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 вместо вставки записи.

Любая помощь действительно ценится.

Комментарии:

1. Можете ли вы уточнить, что вы хотите? на данный момент он возвращает 0, если любой из них равен нулю, что вы хотите, чтобы он делал вместо этого?

2. в чем проблема? Попробуйте установить значения по умолчанию для параметров.

3. На моем компьютере это ведет себя так, как вы описываете. Может быть, я не понимаю вопроса? Когда любое значение равно null , оно возвращается 0 , и если RoleName оно уже существует, оно также возвращается 0 . Он возвращается 1 , когда значение RoleName не равно нулю, а значение Status не равно нулю, и RoleName оно еще не существует. Чем это отличается от того, чего вы пытаетесь достичь?

4. когда я ввожу rolename empty или null, он сохраняет данные, вместо этого я хочу, чтобы он возвращал 0.

5. Попробуйте добавить значения по умолчанию и / или проверить, является ли @rolename пустой строкой. Проверьте мой ответ.

Ответ №1:

Прежде чем вы опишете свою проблему, я просто предположу. Я полагаю, проблема в параметрах по умолчанию. Возможно, вы просто не передаете параметры или передаете пустую строку, поэтому попробуйте этот способ

  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
 

Комментарии:

1. теперь все работает нормально. можете ли вы сказать мне, обязательно ли присваивать значения, как вы это делали ..?

2. Только если у вас есть необязательные параметры. Проверьте ссылки для получения дополнительной информации

3.blog.tech-cats.com/2008/01/… geekswithblogs.net/whiletrue/archive/2009/02/28/…