存储过程:
CREATE proc [dbo].[ZKWB_Match_kcbm]      
(      
 @xs_bm varchar(20),--学生编码(准考证号码)      
 @xt_kcbm varchar(5)--考次编码      
)      
/*      
   *********************************************************************      
 * author:<lbh>                
 * createdate:<2012-10-30 13:23:29>           
 * Description:<表t_tkbk和表T_Import_bak比对 找出后者多出的数据>        
   *********************************************************************      
*/      
as     
;with t      
as(      
 select      
  a.XX_BM,      
  a.XS_BM,      
  a.XS_XM,      
  a.KC_BM      
 from      
  T_Import_bak a   -- select * from T_Import_bak  
 where  
 a.xs_bm=@xs_bm     
 and not exists(select 1 from t_tkbk b   
     where a.xs_bm=b.xs_bm and a.kc_bm<>b.kc_bm and b.kaoc_bm=@xt_kcbm  
     )   
)      
select       
 --t.xs_bm as XS_BM,      
 t.kc_bm AS KC_BM,      
 b.xs_gsd AS KS_GSD,      
 b.zy_bm AS ZY_BM,      
 --t.xx_bm AS XX_BM,      
 @xt_kcbm AS KAOC_BM,      
 b.dsz_bm AS KS_DSZ_BM,      
 b.qx_bm AS QX_BM,      
 0 AS BB_BM,      
 null AS BBSH_BM,      
 100 AS ZF_BZ,    
 c.KC_BKFY      
from       
 t      
left join      
 t_gdxs b      
on      
 b.xs_bm=t.xs_bm    
left join    
 td_skkb c    
on    
 c.xx_bm=t.xx_bm and c.kc_bm=t.kc_bm   
这个存储过程在数据库端执行没有任何错误,而且返回正确结果但是放到前台调用  总是返回
[SqlException (0x80131904): 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。]求解释啊

解决方案 »

  1.   

    select 1 from t_tkbk b   
         where a.xs_bm=b.xs_bm and a.kc_bm<>b.kc_bm and b.kaoc_bm=@xt_kcbm  
    1  后面的列名呢? 
      

  2.   


    not exists后面的子查询只返回1或者0  也就是说真假  这个可以不写任何字段
      

  3.   


    可以不要列名吧  在项目中 exists一般我也用的 exists(select 1 from **** )
      

  4.   

    打开SQL Server Profiler跟踪sql,并且调试你的代码,应该不是这里的问题。
      

  5.   

    select 1 from t_tkbk b   
         where a.xs_bm=b.xs_bm and a.kc_bm<>b.kc_bm and b.kaoc_bm=@xt_kcbm 你这里的子查询貌似就是这里。你重点看哈这里,再看看数据库中的数据,看跟你预想的一致不
      

  6.   

    应该跟你赋值的对象有关系,你把SQL查询结果赋给了一个Table应该就可以了