Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 防止/不显示结果集的另一种方法_Sql_Sql Server 2008_Rdbms - Fatal编程技术网

Sql 防止/不显示结果集的另一种方法

Sql 防止/不显示结果集的另一种方法,sql,sql-server-2008,rdbms,Sql,Sql Server 2008,Rdbms,如果tab1和tab2只返回结果,那么我是否希望 最后选择0,0。。。被退回 select tab1.openedcnt, tab2.closedcnt, 'ModuleA' AS Module from (select count(*) openedcnt,'constant1' const WHERE 1=1) tab1 cross join (select count(*) closedcnt,'constant2' const WHERE 1=2 )tab2-- simulatin

如果tab1和tab2只返回结果,那么我是否希望 最后选择0,0。。。被退回

select tab1.openedcnt, tab2.closedcnt, 'ModuleA' AS Module
from
(select count(*) openedcnt,'constant1' const
WHERE 1=1) tab1
   cross join
(select count(*) closedcnt,'constant2' const
WHERE 1=2 )tab2-- simulating no result set returned
union
select 0,0,'ModuleA'  
结果

openedcnt   closedcnt   Module
0   0   ModuleA
1   0   ModuleA
我无法摆脱交叉连接。 where语句仅用于本示例

例如…如果tab1返回结果,而tab2不返回结果 然后我希望得到的结果

openedcnt   closedcnt   Module
1   0   ModuleA
openedcnt   closedcnt   Module
0   0   ModuleA
如果tab1和tab2不返回结果,那么我希望得到

openedcnt   closedcnt   Module
1   0   ModuleA
openedcnt   closedcnt   Module
0   0   ModuleA

谢谢您的帮助。

嗯。我认为您可以直接使用union all而不是exists来完成这项工作。以下是想法:

with tab1 as (
      select count(*) openedcnt, 'constant1' const
      where 1=1
     ),
     tab2 as (
      select count(*) closedcnt, 'constant2' const
      where 1=2
     )
select tab1.*
from tab1
union all
select tab2.*
from tab2
union all
select 0, 0, 'ModuleA'
where not exists (select 1 from tab1) and not exists (select 1 from tab2);

请注意,使用CTE可以使查询更易于编写和读取。

对不起……当我只有sql server 2008时,我错误地标记了sql server 2008 r2。我得到了Msg 102,15级,状态1,第36行,靠近“,”的语法不正确。tab2前面的逗号。