--好像不会,你是不是弄错了。
declare @re varchar(10)
if exists(select 1 from authors where 1=2
union
select 1 from jobs where 1>2
union
select 1 from jobs
)
set @re= 'ok'
else
set @re= 'er'
print @re
declare @re varchar(10)
if exists(select 1 from authors where 1=2
union
select 1 from jobs where 1>2
union
select 1 from jobs
)
set @re= 'ok'
else
set @re= 'er'
print @re
declare @Rlt intdeclare @t table(id int)if exists(select * from @t union select 1)
set @Rlt = 4
else
set @Rlt = 5
print @Rlt
/*
结果
4
*/
哦,我同事帮我搞定了,发现了sql server7.0的一个bug,
他只认识前面2个union,2000.0就没有问题,测试用wgsasd311的代码!1.在7.0的server:
declare @re varchar(10)
if exists(select 1 from prg_sys where 1=2
union
select 1 from prg_sys where 1>2
union
select 1 from prg_sys
)
set @re= 'ok'
else
set @re= 'er'
print @re/*
er
*/2.declare @re varchar(10)if exists(
select 1 from prg_sys
union
select 1 from prg_sys where 1=2 --放在第一个或者第2个就是ok
union
select 1 from prg_sys where 1>2
)
set @re= 'ok'
else
set @re= 'er'
print @re/*
ok
*/我狂晕,不够还好,我分开检查就可以啦!
大家如果有用7.0,就记住这个bug,否则,掉了n根头发,也想不出来:.(
谢谢
你的问题在WINDOWS2000里是没问题的,从我上午发给你的测试语句可以得知,但在7.0就不行,也许像你说的一样,7.0版本最多支持两层的union (union all)嵌套.可以在7.0 里测试下以下语句查下:
select 1 as col
union
select 2
union
select 3
union
select 4
正如wgsasd311说的7.0的IF EXISTS只能识别两层的union (union all)嵌套,但是iwl()的担心没有必要,因为他的确UNION ,UNION ALL是不同,UNION 会删除重复列,7.0也是如此,你知道吗?我的3个SELECT只有一个有记录,并且只有一条,所以用UNION 或者UNION ALL没有影响!这里是因为IF EXISTS的BUG原因啦!
TKS!
http://www.microsoft.com/sql/downloads/sp4.mspx