再现理想 发表于 2015-1-16 22:38:53

MSSQL网页编程之经由过程function办理部分庞大查询的办法

BDB源自BerkeleyDB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性办理
在做一个论坛时,必要掏出论坛中某个板块的相干信息,同时要获得该板块的版主信息(姓名及Id),但版主多是多个,方便于利用间接联系关系的手腕来完成,那样大概招致数据量年夜,并且会增添程序的庞大度。
后思索一种变通的手腕,能够使用一个function来获得一切版主信息,将他们拼合为一个字符串,在获得板块信息时,在select语句中到场一个function,从而失掉响应的了局。
以下是部分的例子:

----------使用function获得版主信息
FUNCTIONgetOwnerOfTheme(p_themeIdNUMBER)RETURNVARCHAR2
IS
tempStrVARCHAR2(300);
tempcurtcur;
vuseridVARCHAR2(20);
vusernameVARCHAR2(20);
BEGIN
OPENtempcurFORSELECTa.userid,a.username
FROMhome_usera,home_forumownerb
WHEREa.userid=b.useridANDb.themeid=p_themeId;
LOOP
FETCHtempcurINTOvuserid,vusername;
EXITWHENtempcur%NOTFOUNDORtempcur%NOTFOUNDISNULL;
tempStr:=tempStr||vuserid||:||vusername||,;
ENDLOOP;
CLOSEtempcur;
RETURNtempStr;
END;

---在挪用的存储过程当中,在select子句中挪用function的值
procedure()
is
begin
SELECTthemeId,getOwnerOfTheme(themeid)owner
FROMhome_forumthemeORDERBYthemeid;
end;
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。

乐观 发表于 2015-1-17 23:15:05

SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)

飘飘悠悠 发表于 2015-1-21 10:02:49

记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。

再见西城 发表于 2015-1-30 14:31:28

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!

仓酷云 发表于 2015-2-6 13:24:24

一个是把SQL语句写到客户端,可以使用DataSet进行加工;

飘灵儿 发表于 2015-2-16 07:07:16

外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。

再现理想 发表于 2015-3-5 00:54:14

现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.

谁可相欹 发表于 2015-3-11 22:03:54

而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~

admin 发表于 2015-3-19 14:52:14

但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。

海妖 发表于 2015-3-28 14:54:46

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
页: [1]
查看完整版本: MSSQL网页编程之经由过程function办理部分庞大查询的办法