各位大虾,下面是循环中的一段命令,可是有毛病,请大虾们帮我看看错在哪了。目的是这样的:
如果表FF不为空,则导出为TXT文件,条件是e!=150并且e=150的记录为10条,然后删除表FF.
下面的命令可以导出TXT文件,可是表FF为空时也导出了空的TXT文件,请大虾们帮我看看是错在哪里。先谢谢!!
set @s=
'EXEC master..xp_cmdshell ''bcp "
select distinct a,b,c,d from sd..FF
where Exists (select 1 from (select * from sd..FF) n)
and e!=150
and (select count(*) from sd..FF where e=150)=10" queryout f:\FF'+ltrim(@ff)+'.txt -c -t, -U -Ppassword'' if (select count(*) from FF where e=15)=10 TRUNCATE TABLE FF' exec(@s)
如果表FF不为空,则导出为TXT文件,条件是e!=150并且e=150的记录为10条,然后删除表FF.
下面的命令可以导出TXT文件,可是表FF为空时也导出了空的TXT文件,请大虾们帮我看看是错在哪里。先谢谢!!
set @s=
'EXEC master..xp_cmdshell ''bcp "
select distinct a,b,c,d from sd..FF
where Exists (select 1 from (select * from sd..FF) n)
and e!=150
and (select count(*) from sd..FF where e=150)=10" queryout f:\FF'+ltrim(@ff)+'.txt -c -t, -U -Ppassword'' if (select count(*) from FF where e=15)=10 TRUNCATE TABLE FF' exec(@s)
set @s=
'EXEC master..xp_cmdshell ''bcp "
select distinct a,b,c,d from sd..FF
where Exists (select 1 from sd..FF ) ---- 修改
and e!=150
or -----感觉这里应该为 or
(select count(*) from sd..FF where e=150)=10" queryout f:\FF'+ltrim(@ff)+'.txt -c -t, -U -Ppassword'' if (select count(*) from FF where e=15)=10 TRUNCATE TABLE FF' exec(@s)
谢谢修改。
导出记录有两个条件:
1.e!=150
2.表FF中e=150的记录有10条。
2.表FF中e=150的记录有10条。
你这2个条件互相矛盾啊,所以我猜是or 的关系
不矛盾的,表FF中存在e=150的记录,但是并不导出这样的记录。
我上面的命令中Exists (select 1 from (select * from sd..FF) n) 这句是不是不管用,本来是用来控制导出时FF不为空,可现在连空FF也向外导,就是这个问题。
where exists (select count(1) from (select * from sd..FF) n is not null)
还有一点我觉得奇怪:(select count(*) from sd..FF where e=150)=10这句不是已经限制了导出的前提不为空吗,为什么为空的FF还向外导呢?
目的:
FF表不为空时导出TXT文件.FF表不为空时肯定有e=150的记录,当e=150的记录满10条后,导出不包括e=150的记录.不知这样说大虾们是否明白.请大虾们帮帮我.