select ... into #temp from ....... 速度极快,2,500,000条记录,16S
一个存储过程样例,有兴趣可以分析一下!
1SET QUOTED_IDENTIFIER ON 2GO 3SET ANSI_NULLS ON 4GO 5 6 7 8 9 10ALTERProcedure sp_tg009 11/**//* Param List */ 12@TE_I_E_FLAGvarchar(4),/**//*进出口方式*/ 13@TE_PASS_RANGEvarchar(4),/**//*关区范围*/ 14@TE_C_OUTPUTvarchar(4),/**//*输出方式退单理由输出、申报单位输出、全部输出*/ 15@TE_END_DATEdatetime,/**//**********申报起止日期********/ 16@TE_END_DATEENDdatetime,/**//*************************/ 17@TE_MONI_Tvarchar(4),/**//*监控类型*/ 18@USER_IDvarchar(64), 19@CUSTOMER_CODEvarchar(4), 20@PAGE_NUMBERint, 21@TOTAL_COUNTint OUTPUT 22AS 23 24/**//****************************************************************************** 25** File: 26** Name: sp_tg009 27** Desc: 通关业务监控-通关规范监控-报关单退(拒)单管理 28** 29** This template can be customized: 30** 31** Return values: 32** 33** Called by: 34** 35** Parameters: 36** Input Output 37** ---------- ----------- 38** 39** Auth: chengdj 40** Date: 2005-4-7 41******************************************************************************* 42** Change History 43******************************************************************************* 44** Date: Author: Description: 45** -------- -------- ------------------------------------------- 46** 2005-04-11 chengdj add HgDiv function 47** 2005-04-11 chengdj 48*******************************************************************************/ 49SET NOCOUNT ON 50 51declare@sqlWherevarchar(4000) 52set@sqlWhere='' 53 54set@TE_END_DATEEND=DATEADD(Day,1,@TE_END_DATEEND) --结束日期加一天 55set@sqlWhere=@sqlWhere' TE_END_DATE >= '''CONVERT(varchar(20),@TE_END_DATE) ''' and TE_END_DATE < '''CONVERT(varchar(20),@TE_END_DATEEND)'''' 56 57if@TE_I_E_FLAG<>'-2'----进出口 58set@sqlWhere=@sqlWhere' and TE_I_E_FLAG = '''@TE_I_E_FLAG'''' 59 60if@TE_PASS_RANGE<>'-2'--关区范围 61set@sqlWhere=@sqlWhere' and TE_PASS_RANGE in ( SELECT a.GCL_CODE 62FROM GL_CUSTOMER_LIST a CROSS JOIN 63 GL_CUSTOMER_LIST b 64WHERE (a.GCL_LAYER LIKE b.GCL_LAYER ''%'') AND (b.GCL_CODE = '''@TE_PASS_RANGE''')) ' 65 66/**//* if @TE_C_OUTPUT<> '-2' --输出方式 67 set @sqlWhere = @sqlWhere 'and ' 68****************监控类型**********************/ 69 70/**//*if @TE_MONI_T <> '-2' --监控类型 71 if @TE_MONI_T = '2' 72 set @sqlWhere = @sqlWhere ' AND TE_SCENE_FLAG = 1 ' 73 else 74 set @sqlWhere = @sqlWhere ' AND TE_WORKER_FLAG = ' @TE_MONI_T ' '*/ 75/**//* 76CREATE TABLE #TG009( 77 TE_PASS_RANGE VARCHAR(4) PRIMARY KEY NOT NULL, 78 MAN_CLE_COUNT int null, --人工退单报关单总数 79 MAN_CLE_TOTAL int null, --人工退单报关单总数 80 MAN_CLE_PCT float null, --人工退单率 81 ELC_CLE_COUNT int null, --电子退单总数 82 ELC_CLE_TOTAL int null, --电子退单总次数 83 MAN_MU_COUNT int null, --多次人工退单报关单数 84 ELC_CLE_PCT float null, --电子退单率-- 85 RE_COUNT int null, --现场拒单报关单总数-- 86 RE_TOTAL int null, --现场拒单报关单总次数-- 87 RE_PCT float null, --现场拒单报关单率-- 88 MU_ELC_CEL_EXP float null, --多次电子退单指数 89 MU_MAN_EXP float null, --多次人工退单指数 90 MU_SEC_EXP float null --多次现场拒单指数 91) 92*/ 93declare@sqlvarchar(8000) 94declare@groupbyvarchar(50) 95 96if@TE_C_OUTPUT='1'--按申报单位 97set@groupby='TE_AGENT_CODE' 98else--其它按关区 99set@groupby='TE_PASS_RANGE' 100 101declare@sql2nvarchar(500) 102set@sql2='select @COUNT = count(distinct('@groupby')) from TG_ENTRY where '@sqlWhere 103execute sp_executesql 104@sql2, 105 N'@COUNT int output', 106@TOTAL_COUNT output 107 108DECLARE@START_IDINT 109DECLARE@END_IDINT 110SET@START_ID= (@PAGE_NUMBER-1) *151 111SET@END_ID=@PAGE_NUMBER*15 112 113---- 114---- 115----- 116if@TE_MONI_T='1'--人工退单 117set@sql=' 118 select top 'convert(varchar(20),@END_ID)''@groupby',IDENTITY(int,1,1) AS TID into #PAGE from TG_ENTRY where '@sqlWhere' group by '@groupby'; 119 CREATE TABLE #TG009( 120'@groupby' VARCHAR(10) PRIMARY KEY NOT NULL, 121 MAN_CLE_COUNT int null, 122 MAN_CLE_TOTAL int null, 123 MAN_CLE_PCT numeric(10,2) null, 124 MU_MAN_EXP numeric(10,2) null, 125 MAN_CLE_TOTAL1 int null, 126 MAN_CLE_TOTAL2 int null, 127 MAN_CLE_TOTAL3 int null 128 ); 129 130 SELECT '@groupby',TE_CANCEL_FLAG,TE_WORKER_FLAG,TE_END_FLAG,TE_CANCEL_TIME INTO #temp1 FROM TG_ENTRY where'@sqlWhere' AND '@groupby' in ( select '@groupby' from #PAGE where TID between 'convert(varchar(20),@START_ID)' AND 'convert(varchar(20),@END_ID)'); 131 INSERT INTO #TG009( 132'@groupby', 133 MAN_CLE_COUNT, 134 MAN_CLE_TOTAL, 135 MAN_CLE_PCT, 136 MU_MAN_EXP, 137 MAN_CLE_TOTAL1, 138 MAN_CLE_TOTAL2, 139 MAN_CLE_TOTAL3) 140 SELECT a.'@groupby', 141 (SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 1 and '@groupby' =a.'@groupby'), 142 (SELECT SUM(TE_CANCEL_TIME) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 1 and '@groupby' =a.'@groupby'), 143 risk.HgDiv((SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 1 and '@groupby' =a.'@groupby'),(SELECT COUNT(*) FROM #temp1 WHERE TE_END_FLAG = 1 AND TE_WORKER_FLAG = 1 and '@groupby' =a.'@groupby')), 144 risk.HgDiv((SELECT SUM(TE_CANCEL_TIME) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 0 and '@groupby' =a.'@groupby'),(SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 0 and '@groupby' =a.'@groupby')), 145 (SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 1 AND TE_CANCEL_TIME = 1 AND '@groupby' =a.'@groupby'), 146 (SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 1 AND TE_CANCEL_TIME = 2 AND '@groupby' =a.'@groupby'), 147 (SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 1 AND TE_CANCEL_TIME > 2 AND '@groupby' =a.'@groupby') 148 from #temp1 a 149 group by a.'@groupby'; 150 DROP TABLE #temp1; 151 SELECT * FROM #TG009; 152 DROP TABLE #TG009' 153elseif@TE_MONI_T='0'--电子 154set@sql=' 155 select top 'convert(varchar(20),@END_ID)''@groupby',IDENTITY(int,1,1) AS TID into #PAGE from TG_ENTRY where '@sqlWhere' group by '@groupby'; 156 CREATE TABLE #TG009( 157'@groupby' VARCHAR(10) PRIMARY KEY NOT NULL, 158 ELC_CLE_COUNT int null, 159 ELC_CLE_TOTAL int null, 160 ELC_CLE_PCT numeric(10,2) null, 161 MU_ELC_CEL_EXP numeric(10,2) null, 162 ELC_CLE_COUNT1 int null, 163 ELC_CLE_COUNT2 int null, 164 ELC_CLE_COUNT2B int null 165 ); 166 SELECT '@groupby',TE_CANCEL_FLAG,TE_WORKER_FLAG,TE_END_FLAG,TE_CANCEL_TIME INTO #temp1 FROM TG_ENTRY where'@sqlWhere' AND '@groupby' in ( select '@groupby' from #PAGE where TID between 'convert(varchar(20),@START_ID)' AND 'convert(varchar(20),@END_ID)'); 167 INSERT INTO #TG009( 168'@groupby', 169 ELC_CLE_COUNT, 170 ELC_CLE_TOTAL, 171 ELC_CLE_PCT, 172 MU_ELC_CEL_EXP, 173 ELC_CLE_COUNT1, 174 ELC_CLE_COUNT2, 175 ELC_CLE_COUNT2B) 176 SELECT a.'@groupby', 177 (SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 0 and '@groupby' =a.'@groupby'), 178 (SELECT SUM(TE_CANCEL_TIME) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 0 and '@groupby' =a.'@groupby'), 179 risk.HgDiv((SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 0 and '@groupby' =a.'@groupby'),(SELECT COUNT(*) FROM #temp1 WHERE TE_END_FLAG = 1 AND TE_WORKER_FLAG = 0 and '@groupby' =a.'@groupby')), 180 risk.HgDiv((SELECT SUM(TE_CANCEL_TIME) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 0 and '@groupby' =a.'@groupby'),(SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 0 and '@groupby' =a.'@groupby')), 181 (SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 0 AND TE_CANCEL_TIME = 1 AND '@groupby' =a.'@groupby'), 182 (SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 0 AND TE_CANCEL_TIME = 2 AND '@groupby' =a.'@groupby'), 183 (SELECT COUNT(*) FROM #temp1 WHERE TE_CANCEL_FLAG = 1 AND TE_WORKER_FLAG = 0 AND TE_CANCEL_TIME > 2 AND '@groupby' =a.'@groupby') 184 from #temp1 a 185 group by a.'@groupby'; 186 DROP TABLE #temp1; 187 SELECT * FROM #TG009; 188 DROP TABLE #TG009' 189 190elseif@TE_MONI_T='2'--现场拒单 191set@sql=' 192 select top 'convert(varchar(20),@END_ID)''@groupby',IDENTITY(int,1,1) AS TID into #PAGE from TG_ENTRY where '@sqlWhere' group by '@groupby'; 193 CREATE TABLE #TG009( 194'@groupby' VARCHAR(10) PRIMARY KEY NOT NULL, 195 RE_COUNT int null, 196 RE_TOTAL int null, 197 RE_PCT numeric(10,2) null, 198 MU_SEC_EXP numeric(10,2) null, 199 RE_TOTAL1 int null, 200 RE_TOTAL2 int null, 201 RE_TOTAL2B int null 202 ); 203 SELECT '@groupby',TE_SCENE_TIME,TE_CANCEL_FLAG,TE_SCENE_FLAG,TE_MEET_FLAG INTO #temp1 FROM TG_ENTRY where'@sqlWhere' AND '@groupby' in ( select '@groupby' from #PAGE where TID between 'convert(varchar(20),@START_ID)' AND 'convert(varchar(20),@END_ID)'); 204 INSERT INTO #TG009( 205'@groupby', 206 RE_COUNT, 207 RE_TOTAL, 208 RE_PCT, 209 MU_SEC_EXP, 210 RE_TOTAL1, 211 RE_TOTAL2, 212 RE_TOTAL2B) 213 SELECT a.'@groupby', 214 (SELECT COUNT(*) FROM #temp1 WHERE TE_SCENE_FLAG = 1 and '@groupby' =a.'@groupby'), 215 (SELECT SUM(TE_SCENE_TIME) FROM #temp1 WHERE TE_SCENE_FLAG = 1 and '@groupby' =a.'@groupby'), 216 risk.HgDiv((SELECT SUM(TE_SCENE_TIME) FROM #temp1 WHERE TE_SCENE_FLAG = 1 and '@groupby' =a.'@groupby'),(SELECT COUNT(*) FROM #temp1 WHERE TE_MEET_FLAG = 1 and '@groupby' =a.'@groupby')), 217 risk.HgDiv((SELECT SUM(TE_SCENE_TIME) FROM #temp1 WHERE TE_SCENE_FLAG = 1 and '@groupby' =a.'@groupby'),(SELECT COUNT(*) FROM #temp1 WHERE TE_SCENE_FLAG = 1 and '@groupby' =a.'@groupby')), 218 (SELECT COUNT(*) FROM #temp1 WHERE TE_SCENE_FLAG = 1 AND TE_SCENE_TIME = 1 AND '@groupby' =a.'@groupby'), 219 (SELECT COUNT(*) FROM #temp1 WHERE TE_SCENE_FLAG = 1 AND TE_SCENE_TIME = 2 AND '@groupby' =a.'@groupby'), 220 (SELECT COUNT(*) FROM #temp1 WHERE TE_SCENE_FLAG = 1 AND TE_SCENE_TIME > 2 AND '@groupby' =a.'@groupby') 221 from #temp1 a 222 group by a.'@groupby'; 223 DROP TABLE #temp1; 224 SELECT * FROM #TG009; 225 DROP TABLE #TG009' 226--print @sql 227 228exec(@sql) 229 230 231 232 233 234 235SET NOCOUNT OFF 236 237 238 239 240 241GO 242SET QUOTED_IDENTIFIER OFF 243GO 244SET ANSI_NULLS ON 245GO 246 247