各位大虾,下面是循环中的一段命令,可是有毛病,请大虾们帮我看看错在哪了。目的是这样的:
如果表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)

解决方案 »

  1.   


    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)
      

  2.   


    谢谢修改。
    导出记录有两个条件:
    1.e!=150
    2.表FF中e=150的记录有10条。
      

  3.   

    1.e!=150 
    2.表FF中e=150的记录有10条。
    你这2个条件互相矛盾啊,所以我猜是or 的关系
      

  4.   


    不矛盾的,表FF中存在e=150的记录,但是并不导出这样的记录。
    我上面的命令中Exists (select 1 from (select * from sd..FF) n) 这句是不是不管用,本来是用来控制导出时FF不为空,可现在连空FF也向外导,就是这个问题。
      

  5.   

    ---你要判断它不为空应该这么写
    where exists (select count(1) from (select * from sd..FF) n is not null) 
      

  6.   

    我晕,写错了,没有Exists (select 1 from (select * from sd..FF) n)时,空和不空的FF表都向外导,而加上这句就什么也不导了。
    还有一点我觉得奇怪:(select count(*) from sd..FF where e=150)=10这句不是已经限制了导出的前提不为空吗,为什么为空的FF还向外导呢?
      

  7.   


    目的:
    FF表不为空时导出TXT文件.FF表不为空时肯定有e=150的记录,当e=150的记录满10条后,导出不包括e=150的记录.不知这样说大虾们是否明白.请大虾们帮帮我.