存储过程:
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): 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。]求解释啊
where a.xs_bm=b.xs_bm and a.kc_bm<>b.kc_bm and b.kaoc_bm=@xt_kcbm
1 后面的列名呢?
not exists后面的子查询只返回1或者0 也就是说真假 这个可以不写任何字段
可以不要列名吧 在项目中 exists一般我也用的 exists(select 1 from **** )
where a.xs_bm=b.xs_bm and a.kc_bm<>b.kc_bm and b.kaoc_bm=@xt_kcbm 你这里的子查询貌似就是这里。你重点看哈这里,再看看数据库中的数据,看跟你预想的一致不