三个表关联取数据,当数据很多时会出现内部查询处理器错误: 在查询优化过程中,查询处理器用尽了堆栈空间。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
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. 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