若相依 发表于 2015-1-16 22:21:50

MSSQL网页编程之我的存储历程进修2

在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。另外,索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。存储历程
营业体系必要一个关于条约形态的报表,次要显现条约的形态,区域,条约客户范例,条约金额,利钱金额等信息.
在数据库中存在4个表
crec01c,sysc01,sysc03d,crmc02分离是条约主表,地区及营业同伴,体系形态代码,法人信息表
上面第一个存储历程是我第一次写的,实行工夫是5秒
------------------效力较差的存储历程---------------------------
CREATETABLE#tmptba--创立一个一时表,用于贮存我们的了局
(
colIDintIDENTITY(1,1)PRIMARYKEYCLUSTERED,
khlxvarchar(20),
dqvarchar(20),
ywhbvarchar(40),
htztvarchar(20),
htbsint,
htjenumeric(13,2),
lxjenumeric(13,2)
)
DECLARE@bkhlxchar(1),@ikhidint,@cywdbdchar(10),@chtztchar(1),@njkjenumeric(13,2),@iqxint,@nhtyllnumeric(8,6)--FORProgress
DECLARE@t_khlxvarchar(20),@t_dqvarchar(20),@t_ywhbvarchar(40),@t_htztvarchar(20),@t_htbsint,@t_htjenumeric(13,2),@t_lxjenumeric(13,2)--FORINSERTINTO#tmptba
--DECLARE@indexint
--SET@index=1
DECLAREcur1CURSORFORSELECTbkhlx,ikhid,cywdbd,chtzt,njkje,iqx,nhtyllFROMcrec01c
OPENcur1
FETCHNEXTFROMcur1INTO@bkhlx,@ikhid,@cywdbd,@chtzt,@njkje,@iqx,@nhtyll
WHILE@@FETCH_STATUS=0
BEGIN
IF@bkhlx=1
BEGIN
SET@t_khlx=天然人
SET@t_dq=(SELECTvjgmcFROMsysc01WHEREcjgdm=left(@cywdbd,6))
END
ELSE
BEGIN
SET@t_khlx=法人
SET@t_dq=(SELECTvjgmcFROMsysc01WHEREcjgdm=(SELECTcbmdmFROMcrmc02WHEREfrid=@ikhid))
END
SET@t_htbs=1--@index--条约笔数

SET@t_ywhb=(SELECTvjgmcFROMsysc01WHEREcjgdm=@cywdbd)--营业同伴
SET@t_htzt=(SELECTvsjxcFROMsysc03dWHEREczddm=htztANDcsjxm=@chtzt)--条约形态
SET@t_htje=@njkje
SET@t_lxje=@njkje*@iqx*@nhtyll*0.001

INSERTINTO#tmptba(khlx,dq,ywhb,htzt,htbs,htje,lxje)VALUES(@t_khlx,@t_dq,@t_ywhb,@t_htzt,@t_htbs,@t_htje,@t_lxje)
--SET@index1
FETCHNEXTFROMcur1INTO@bkhlx,@ikhid,@cywdbd,@chtzt,@njkje,@iqx,@nhtyll
END
CLOSEcur1
DEALLOCATEcur1
SELECT*FROM#tmptba
GO
------------------效力较高的存储历程实行工夫是1秒---------------------------
CREATETABLE#tmptbl--创立一个一时表,用于贮存我们的了局
(
colIDintIDENTITY(1,1)PRIMARYKEYCLUSTERED,
khlxvarchar(20),
dqvarchar(20),
ywhbvarchar(40),
htztvarchar(20),
htbsint,
htjenumeric(13,2),
lxjenumeric(13,2)
)
INSERTINTO#tmptblSELECTCASEWHENa.bkhlx=1THEN天然人ELSE法人ENDASkhlx,dq=(SELECTvjgmcFROMsysc01WHEREcjgdm=left(a.cywdbd,6)),ywhb=(SELECTvjgmcFROMsysc01WHEREcjgdm=a.cywdbd),htzt=(SELECTvsjxcFROMsysc03dWHEREczddm=htztANDcsjxm=a.chtzt),htbs=1,htje=a.njkje,lxje=a.njkje*a.iqx*a.nhtyll*0.001FROMcrec01caWHEREa.bkhlx=1

INSERTINTO#tmptblSELECTCASEWHENa.bkhlx=1THEN天然人ELSE法人ENDASkhlx,dq=(SELECTvjgmcFROMsysc01WHEREcjgdm=(SELECTcbmdmFROMcrmc02WHEREfrid=a.ikhid)),ywhb=无,htzt=(SELECTvsjxcFROMsysc03dWHEREczddm=htztANDcsjxm=a.chtzt),htbs=1,htje=a.njkje,lxje=a.njkje*a.iqx*a.nhtyll*0.001FROMcrec01caWHEREa.bkhlx=2

SELECT*FROM#tmptbl
GO


能够看到,第二个存储历程只用了两条sql语句就完成了第一个存储历程的事情。
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

兰色精灵 发表于 2015-1-19 09:27:30

这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。

飘灵儿 发表于 2015-2-5 18:51:11

Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。

精灵巫婆 发表于 2015-2-13 06:38:15

无法深入到数据库系统层面去了解和探究

爱飞 发表于 2015-3-3 18:09:17

发几份SQL课件,以飨阅者

变相怪杰 发表于 2015-3-11 12:40:54

语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!

山那边是海 发表于 2015-3-18 18:34:11

你可以简单地认为适合的就是好,不适合就是不好。

谁可相欹 发表于 2015-3-26 14:02:51

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
页: [1]
查看完整版本: MSSQL网页编程之我的存储历程进修2