请注意,你的这句有毛病select distinct bmdm,khdm from (
select distinct bmdm,khdm from xhdml  where djlxdm='js' and kdrq between @rq1 and @rq2 union
select distinct bmdm,dwdm from skd_d skd where skd.sfbz='1' and jyrq between @rq1 and @rq2
) t order by bmdm,khdm
应该换成declare @sql varchar(500)
set @sql="select distinct bmdm,khdm from (
select distinct bmdm,khdm from xhdml  where djlxdm='js' and kdrq between "+@rq1+ " and "+@rq2+" union
select distinct bmdm,dwdm from skd_d skd where skd.sfbz='1' and jyrq between"+ @rq1+" and "+@rq2+
") t order by bmdm,khdm"declare cursor_bm cursor for exec(@sql)

解决方案 »

  1.   

    你的SQL语句有问题:
    select distinct bmdm,khdm from xhdml  where djlxdm='js' and kdrq between @rq1 and @rq2 union
    select distinct bmdm,dwdm from skd_d skd where skd.sfbz='1' and jyrq between @rq1 and @rq2用union联合的两个表的结构应该一样呀!
    参帮助:
    使用 UNION 运算符组合多个结果
    UNION 运算符使您得以将两个或多个 SELECT 语句的结果组合成一个结果集。使用 UNION 组合的结果集都必须具有相同的结构。而且它们的列数必须相同,并且相应的结果集列的数据类型必须兼容而你的两个表一个是 distinct bmdm,khdm  另外一个是distinct bmdm,dwdm 是不是你提问时脚本卡错了?你的游标好象没什么问题。
      

  2.   

    我这个cursor中,khdm和dwdm的数据类型都是一样的,只是在不同的表里面不同的称呼。而且这个构成数据集的select 语句单独执行的时候没有问题。