ALTER proc [dbo].[p_nfnid]
@cfcity varchar(50),
 @mdcity  varchar(50),
@hangkong varchar(50),
@cangwei varchar(50),
 @travstadate DateTime,
@travenddate DateTime,
 @adddate  DateTime,
@addop  varchar(50),
@singprice Int,
@dangqian  DateTime,
@RBD varchar(50),
@Judge varchar(10),
@ID int output                                            
as
beginSet @ID =(select top 1 id from guojipiao where cfcity=@cfcity and mdcity=@mdcity and hangkong=@hangkong and cangwei=@cangwei  and travenddate<@dangqian or travstadate>@dangqian and RBD=@RBD and singprice=@singprice)
update  guojipiao set adddate=@adddate,addop=@addop  ,travenddate=@travenddate, travstadate=@travstadate ,Judge=@Judge
where cfcity=@cfcity and mdcity=@mdcity and hangkong=@hangkong and cangwei=@cangwei  
and travenddate<@dangqian or travstadate>@dangqian and RBD=@RBD and singprice=@singpriceend
这个存储过程目的就是 修改时返回主键id 
这个查询语句的条件与修改的条件一样  所以id也一样
我不知道有什么错误  取到的id总是第一条数据id  好像查询条件没点用了!  

解决方案 »

  1.   

    select top 1 id 改成select id 试下
      

  2.   

    http://topic.csdn.net/u/20100413/17/60a21637-d10f-409b-8004-23db445abc26.html?76143
      

  3.   

    可能设定查询条件时,查出来就包含第一条记录,用select id from 表 where 条件 查一下,是不是有多条记录,再作调试
      

  4.   

    Set @ID =(select top 1 id from guojipiao where cfcity=@cfcity and mdcity=@mdcity and hangkong=@hangkong and cangwei=@cangwei and travenddate<@dangqian or travstadate>@dangqian and RBD=@RBD and singprice=@singprice)看了一下你的代码,不知道你的数据库表结构是什么样的?建议你把表结构发出来,还有一点问题,为什么要用select top 1? 难道你的ID不是唯一标识列?
      

  5.   

    sql中OR逻辑 发现真值以后 就忽略后面语句了 
    where (..)and(..)and()..这样试下