其他选择无/空白

时间:2018-10-04 01:00:53

标签: sql sql-server tsql

存储过程中的每个条件语句都需要有一个'ELSE'语句,如何返回使过程什么都不返回?

IF EXISTS(SELECT 1 FROM Account WHERE Account.username=@Username)
BEGIN
    SELECT Status 
    FROM   Account 
    WHERE Account.username=@Username
END
ELSE
BEGIN
    SELECT --nothing/blank
END

谢谢!

6 个答案:

答案 0 :(得分:1)

您可以分配一个变量:

IF EXISTS(SELECT 1 FROM Account WHERE Account.username=@Username)
BEGIN
    SELECT Status 
    FROM   Account 
    WHERE Account.username = @Username;
END;
ELSE
BEGIN
    DECLARE @X int;
    SELECT @X = 0;
END;

答案 1 :(得分:0)

类似这样的东西:

IF EXISTS(SELECT 1 FROM Account WHERE Account.username=@Username)
BEGIN
    SELECT Status 
    FROM   Account 
    WHERE Account.username=@Username
END
ELSE
BEGIN
    SELECT "No rows found" as Status
END

答案 2 :(得分:0)

IF EXISTS(SELECT 1 FROM Account WHERE Account.username=@Username)
BEGIN
    SELECT Status 
    FROM   Account 
    WHERE Account.username=@Username
END
ELSE
BEGIN
    SELECT NULL--nothing/blank
END

答案 3 :(得分:0)

尝试此查询

IF EXISTS(SELECT 1 FROM Account WHERE Account.username=@Username)
BEGIN
    SELECT Status 
    FROM   Account 
    WHERE Account.username=@Username
END
ELSE
BEGIN
    SELECT NULL as 'Status'--nothing/blank
END

答案 4 :(得分:0)

如果要检索Status值,或者如果没有匹配的行,则要检索NULL,则可以使用子查询:

select ( select Status from Account where username = @Username ) as Status;

外部select将始终返回结果。如果子查询不提供值,则结果将为NULL。

如果您要使用其他值(即非NULL)作为默认值,则可以使用Coalesce和子查询:

select Coalesce(
  ( select Status from Account where username = @Username ), -- If found.
  0 -- Default value if not found.
  ) as Status;

NB :假定存在单个匹配行或没有匹配行。如果子查询返回多个值,则代码将失败。

请注意,通过仅查询表一次,任何一种解决方案都可以避免发生竞争情况,而另一会话会在exists检查和返回{的select之间为用户更新或删除行值{1}}。

答案 5 :(得分:0)

如果您不希望返回任何内容,则无需编写else部分。 它将缩短您的代码并易于理解。

如果存在(从帐户WHERE Account.username=@Username中选择1个) 开始     SELECT状态     来自帐户     WHERE Account.username = @用户名 结束 如果您想返回条件以外的其他内容失败,则需要其他部分。