Jag har ett lagrat tillvägagångssätt som följer. Mitt ifrågasätta är kan mig använder #tmp_ bordlägger (före detta#tmp_initial_RMD_candidates) för att sätta in mellanliggande data, och därefter att ladda finaldatan i ”en tp_” bordlägga att ska var van vid frambringar en rapport? för ************************** för If för ********* för för ********** för för ********** för för ********** för för ********** för för ********** för för ********** FINNS (VÄLJ * FRÅN INFORMATION_SCHEMA.TABLES VAR TABLE_SCHEMA = ”dboen” OCH TABLE_NAME = ”tp_rmd_rpt”) TAPPAR BORDLÄGGER tp_rmd_rpt GO IF FINNS (VÄLJ känt FRÅN sysindexes , VAR känt = ”ix01”), TAPPAR INDEXET tp_rmd_rpt.ix01 GO --tappa bordlägger tp_rmd_rpt create bordlägger dbo.tp_rmd_rpt , prsn_id int, pers_id int, varchar ss_nr för (9), varchar fst_nm för (20), varchar mid_nm för (20), varchar last_nm för (20), sfx_cdrödingen för (4), brth_dtdatetime för , deth_dtdatetime för , (för för -- åldras det decimal- (4.1), för RMD_dt för datetime ) för GO create indexet ix01 på ****** för GO /för tp_rmd_rpt (pers_id) anmärker: StoredProcedure [dbo]. skriva daterar: [csp_rmd_rpt] 06/02/2010 07:24: 22 för ************************** för ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* * för **** för för ********** för för ********** för för ********** för för ********** för för ********** för för ********** för för ********** anmärker: */ IF för **** för för ********** för för ********** för för ********** för för ********** för för ********** för för ********** för för ********** för för ************************** för för det lagrade tillvägagångssättet dbo.csp_rmd_rpt FINNS (VÄLJ * FRÅN INFORMATION_SCHEMA.ROUTINES VAR ROUTINE_SCHEMA = ”dboen” OCH ROUTINE_NAME = ”csp_rmd_rpt”) TAPPAR @rpt_run_dt = busn_dt för datetime select för @rpt_run_dt för TILLVÄGAGÅNGSSÄTT dbo.csp_rmd_rpt
as
begin
declare för TILLVÄGAGÅNGSSÄTT dbo.csp_rmd_rpt GO
CREATE från be_busn_dt
Select be_prsn.prsn_id, pers_id, fst_nm, mid_nm, last_nm, sfx_cd, brth_dt, deth_dt, decimal- convert ((5.2), (CASE, NÄR DATEPART (D, getdate ()) >= DATEPART (D, brth_dt) DÄREFTER (DATEDIFF (M, brth_dt, getdate ()) /12.0) ANNARS ((DATEDIFF (M, brth_dt, getdate ()) - 1)/12.0) AVSLUTAR)), åldras (fall, när dagen (dateadd (månad, ((70*12) +6), brth_dt)), = 1 därefter dateadd (månad, ((70*12) +6), dateadd för för brth_dt) annan (dag, 1 - dagen (dateadd (månad, ((70*12) +6), brth_dt)), dateadd (månad, 1, dateadd (månad, ((70*12) +6), brth_dt))) avslutar) be_prsn, be_empt_hist, be_mbr_acct, acct_stat_vw, be_mbr Where be_prsn.prsn_id = be_mbr.prsn_id och be_empt_hist.mbr_id = be_mbr_acct.mbr_id för From för RMD_dt into #tmp_initial_RMD_candidates och be_empt_hist.mbr_id = be_mbr.mbr_id och be_mbr_acct.acct_id = acct_stat_vw.acct_id och be_mbr_acct.mbr_id = be_mbr.mbr_id och be_empt_hist.end_dt i (vald a.max_end_dt från (vald mbr_id, max max_end_dt (för end_dt) från be_empt_hist var mbr_id = gruppen för be_mbr.mbr_id vid mbr_id) a var a.max_end_dt! = ”2999-12-31”) och pers_id ÄR INTE NULL och pln_id<> 3 och DATEDIFF (MÅNADEN, brth_dt, OMVÄNDEN (DATETIME, '04.15. '+ CAST (FALLET, NÄR MÅNADEN (getdate ()) > 4 DÄREFTER ÅR (getdate ()) + 1 ANNAT ÅR (getdate ()) AVSLUTA SOM varchar)), ) > 846 och acct_stat_vw.eff_dt = ( VÄLJER för max (x.eff_dt) FRÅN acct_stat_vw SOM x VAR x.acct_id = acct_stat_vw.acct_id OCH x.acct_id = be_mbr_acct.acct_id och x.acct_stat_cd i (”AGERA”, ”VÄNTAN”, ”DTH”) och omvänden (röding (10), x.eff_dt, 111) + str (x.acct_id) = str för (max vald (omvänden (rödingen (10), x2.eff_dt, 111) + (x2.acct_id)) från where för acct_stat_vw x2 för och acct_stat_vw.acct_stat_cd för för x2.acct_id = för acct_stat_vw.acct_id och för x2.acct_id = för be_mbr_acct.acct_id )) i (”AGERA”, ”VÄNTAN”, ”DTH”), group vid be_prsn.prsn_id, pers_id för , ss_nr för , fst_nm för , mid_nm för , last_nm för , sfx_cd för , brth_dt för , deth_dt för , (FALL, NÄR DATEPART (D, getdate ()) >= DATEPART (D, brth_dt) DÄREFTER (DATEDIFF (M, brth_dt, getdate ()) /12.0) ANNARS ((DATEDIFF (M, brth_dt, getdate ()) - 1)/12.0) AVSLUTAR), --ta bort detta från final sparar, som åldern ska för att inte visas i finalen file. , (fallet, när dagen (dateadd (månad, ((70*12) +6), brth_dt)) därefter dateadd =1 (månad, ((70*12) +6), dateadd för för för brth_dt) annan (dag, 1 - dagen (dateadd (månad, ((70*12) +6), brth_dt)), dateadd (månad, 1, dateadd (månad, ((70*12) +6), brth_dt))) avslutar)
--få initial_rmd_accts.pers_id för acct_bal select, initial_rmd_accts.deth_dt för , sum ( vw.rglr_int_item_amt+ vw.var_int_item_amt + vw.unit_int_item_amt för vw.pre_tax_cntrb+- vw.post_tax_cntrb + vw.empr_pre_tax_cntrb + vw.var_empr_pre_tax_cntrb_amt + vw.var_post_tax_cntrb_amt + vw.var_pre_tax_cntrb_amt+ vw.unt_cntrb_amt + vw.pre_tax_unt_cntrb_amt+) som initial_rmd_accts för #tmp_initial_RMD_candidates för from för tot_acct_bal into #acct_bal, mam_acct_bal_vwvw, be_prsn a, be_mbr b, where för be_mbr_acct c a.pers_id = initial_rmd_accts.pers_id och a.prsn_id = initial_rmd_accts.prsn_id och b.prsn_id- = a.prsn_id- och c.mbr_id- = b.mbr_id- och vw.acct_id- = c.acct_id- och c.pln_id-<> 3 group vid initial_rmd_accts.pers_id, pers_id för initial_rmd_accts.deth_dt
select tprmd.pers_id, deth_dt för acctbal.deth_dt, acctbal.tot_acct_bal, tprmd.prsn_idprsn_id, fst_nm för tprmd.fst_nm, mid_nm för tprmd.mid_nm, last_nm för tprmd.last_nm, sfx_cd för tprmd.sfx_cd, brth_dt för tprmd.brth_dt, tprmd.RMD_dt RMD_dt, case, när acctbal.tot_acct_bal = 0.0 och acctbal.deth_dt inte är ogiltig därefter ”, uteslutar” , när (acctbal.tot_acct_bal = 0.0 och acctbal.deth_dt är ogiltig), eller (acctbal.tot_acct_bal > 0.0 och acctbal.deth_dt är ogiltig), eller (acctbal.tot_acct_bal > 0.0 och acctbal.deth_dt inte är ogiltig), därefter ”inkludera”, avslutar som tprmd för tp_rmd_rpt för from för #tmp_rmd_flag för RMD_flag into sammanfogar #acct_bal acctbal på acctbal.pers_id = tprmd.pers_id
insert in i prsn_id, pers_id, ss_nr, fst_nm, mid_nm, last_nm för tp_rmd_rpt select, sfx_cd, brth_dt, deth_dt, #tmp_rmd_flag where RMD_flag för RMD_dt from = ”inkluderar”, --3486
RETURN END
" klar "
|