三个表关联取数据,当数据很多时会出现内部查询处理器错误: 在查询优化过程中,查询处理器用尽了堆栈空间。SQL语句如下:
select * from  (select  receiveNO,nameCn 姓名,IDNO 证件号,ScanDate 扫描时间,UARLSOURCE 推荐代码,Company 单位名称,R_VerifyCode 已核实内容,R_RecommenMemo 外部核实,case PostADDR when '1' then ADDR1  when '2' then CPY_ADDR1 end as ADDR1,case PostADDR when '1' then ADDR2  when '2' then CPY_ADDR2 end as ADDR2 from dbo.INApply_BaseInfo where receiveNO in (" + strRecNo + ")) a inner join (SELECT ApproveAccounts 账号,ApproveDT_User 审批时间,ReceiveNo 存档号 from dbo.INApply_ExteriorInfo  where receiveNO in (" + strRecNo + ")) b on a.receiveNO=b.存档号 inner join (SELECT ReceiveNo,RiskInfo 风险电征信息, AP_PeopleBank 人行信息分类 from dbo.INApply_FlagInfo  where receiveNO in (" + strRecNo + ")) c on a.receiveNO=c.ReceiveNo

解决方案 »

  1.   

    两种可能, 或兼而有之
    1. receiveNO in (" + strRecNo + "), 那个 strRecNo可能超超长
    2. SQL的写法, 三个子查询, 数据表容量很大的情况下, 很把Tempdb增长很快, 更占内存
    其实不用写成子查询, 直接三张表连接就行, 结果是一样的select a.receiveNO, a.nameCn 姓名, a.IDNO 证件号, a.ScanDate 扫描时间, a.UARLSOURCE 推荐代码,
    a.Company 单位名称, a.R_VerifyCode 已核实内容, a.R_RecommenMemo 外部核实,
    case a.PostADDR when '1' then a.ADDR1  when '2' then a.CPY_ADDR1 end as ADDR1,
    case a.PostADDR when '1' then a.ADDR2  when '2' then a.CPY_ADDR2 end as ADDR2,
    b.ApproveAccounts 账号, b.ApproveDT_User 审批时间, b.ReceiveNo 存档号,
    c.ReceiveNo, c.RiskInfo 风险电征信息, c.AP_PeopleBank 人行信息分类 
    from dbo.INApply_BaseInfo as a
    join dbo.INApply_ExteriorInfo as b
    on a.receiveNO = b.receiveNO and
    a.receiveNO in (" + strRecNo + ")
    join dbo.INApply_FlagInfo as c
    on a.receiveNO = c.receiveNO