我在存储过程中定义了一个临时表。过程中,使用了类似select * from #MyTable where PID = @PID的语句判断临时表中是否已经存在目标记录,有则做Update操作,无则新增加记录。在过程最后,使用select语句一次性返回临时表中的所有记录。我的问题是:用于判断目的的select语句的结果也会出现在最后的结果集,但这不是我所需要的,我只需要最后一次性返回的记录。另外,我在SQL查询分析器中执行存储过程时,最后一次性返回的记录数比预期的少,只有10条左右,而实际应该有上百条记录的。谁能帮帮我啊,建议和思路也行啊。谢谢!

解决方案 »

  1.   

    用于判断目的的select语句的结果也会出现在最后的结果集这个问题这样写:
    if exists(select * from #MyTable where PID = @P)我在SQL查询分析器中执行存储过程时,最后一次性返回的记录数比预期的少,只有10条左右,而实际应该有上百条记录的。这个要看你具体写的语句了!
      

  2.   

    哦,最好这样写:
    if exists(select 1 from #MyTable where PID = @P)
      

  3.   

    哼~不抢了,做事去了~coolingpipe(冷箫轻笛) 88,呵呵
      

  4.   

    建议这样写,如果对于#MyTable中有或没有记录几率在50,50左右的话,下面写法会少执行一些
    sql语句(如果#MyTable存在记录机会越大,性能会更好),其实判断#MyTable是否存在记录也是耗用资源的。 这样写后也可同时避免了判断返回数据集的问题。
      update #MyTable set ...  where PID = @PID
      if @@RowCount<=0  --表示没有记录,需要插入
         insert into #MyTable ()
      select * from #MyTable
      

  5.   

    原来就是一个exists函数的问题啊,谢谢大家!