在Microsoft tSQL中,如果没有找到行,则返回一个值

123

我使用的是 Microsoft 版本的 SQL,这是我的一个简单查询。如果我查询的记录不存在,则不会返回任何结果。我希望在这种情况下返回 false (0)。寻找最简单的方法来处理没有记录的情况。

SELECT  CASE
            WHEN S.Id IS NOT NULL AND S.Status = 1 AND (S.WebUserId = @WebUserId OR S.AllowUploads = 1) THEN 1
            ELSE 0
        END AS [Value]

        FROM Sites S

        WHERE S.Id = @SiteId

实际上,这可能会更容易。请参见下面的答案 - Weihui Guo
16个回答

1
什么是 WITH TIES?
SELECT TOP 1 WITH TIES tbl1.* FROM 
        (SELECT CASE WHEN S.Id IS NOT NULL AND S.Status = 1 
                      AND (S.WebUserId = @WebUserId OR 
                           S.AllowUploads = 1)
                     THEN 1 
                     ELSE 0 AS [Value]
         FROM Sites S
         WHERE S.Id = @SiteId) as tbl1
ORDER BY tbl1.[Value]

1

你可以像这样做一些事情。

IF EXISTS ( SELECT * FROM TableName WHERE Column=colval)
BEGIN
   select 
select name ,Id from TableName WHERE Column=colval
END
ELSE
  SELECT 'test' as name,0 as Id

这个结合移除 ELSE 子句正是我所需要的。如果存在行,你可以返回一个值,否则不会返回任何行。 - Duck Ling

1
你应该避免使用昂贵的方法。TBL2 不需要任何列。
SELECT COUNT(*) FROM(
         SELECT TOP 1     1 AS CNT  FROM  TBL1 
         WHERE ColumnValue ='FooDoo') AS TBL2

或者这段代码:
IF EXISTS (SELECT TOP 1 1 FROM TABLE1 AS T1 
                          WHERE T1.ColumnValue='VooDoo') 
   SELECT 1 
ELSE 
   SELECT 0
 

0

我有一个包含6个查询的联合查询。它们都匹配一个表中的数字。如果其中一个查询没有值,它将不会显示任何结果。


1
目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

0
我的解决方案正在运行。
可以通过将 where 1=2 更改为 where 1=1 进行测试。
select * from (
    select col_x,case when count(1) over (partition by 1) =1 then 1 else HIDE end as HIDE from (
    select 'test' col_x,1 as HIDE
    where 1=2
    union 
    select 'if no rows write here that you want' as col_x,0 as HIDE
    ) a
    ) b where HIDE=1

-2

我喜欢詹姆斯·詹金斯的回复,他使用了ISNULL检查,但我认为他想用IFNULL。ISNULL没有像他语法中那样有第二个参数,但是IFNULL在检查到NULL时会在被检查的表达式后面有第二个参数来替换。


1
这只是一个勉强的答案,你可以将其作为评论。 - biqarboy
在 Microsoft SQL Server 中,使用的语法是 ISNULL(column, defaultvalue)。如果你改成 IFNULL,会出现 'IFNULL' is not a recognized built-in function name 的错误提示。 - Louis Somers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接