#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/…