存储过程中的每个条件语句都需要有一个'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
谢谢!
答案 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 = @用户名 结束 如果您想返回条件以外的其他内容失败,则需要其他部分。