仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 836|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页设计怎样完成100%的静态数据管道(三)

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:37:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
用一个库#bak_database存放这些历史数据。静态|数据
上面看看,怎样依据两头层的数据,构建管道语法:


1.起首创建一个数据窗口工具:d_vdtcolumns


SQL语法是:


SELECTvdt_columns.utid,
vdt_columns.uid,
vdt_columns.upkey,
vdt_columns.udmid,
vdt_columns.udmname,
vdt_columns.unulls,
vdt_columns.uwidth,
vdt_columns.uscale,
vdt_columns.uname,
vdt_columns.udefault,
vdt_columns.ucheck,
vdt_columns.utname,
vdt_columns.uidentity
FROMvdt_columns
WHEREutname=:as_tname


2.筹办事情停当,上面就是主疆场了,入手下手构建数据管道.


思索到一个管道工具能够传输多个义务,创建一个工具nvo_pipetransattrib保留传输必要的语法:
它包括了一下的instance变量:


stringis_objectname//表名
stringis_syntax//管道语法

stringis_sconnect=zw,is_dconnect=daixf//源数据库毗连和目标数据库毗连
stringis_ptype,is_pcommit,is_errors//管道的几个属性
stringis_sname,is_dname//源表名,目标表名
stringis_sqlsyntax//管道的SQL语法



创建一个工具,从数据管道工具承继.

入手下手机关语法:写一个函数.
nvo_pipetransattribinv_attrib[]

stringls_syntax,ls_sourcesyntax,ls_destsyntax

intli,lj,li_ind,li_find,li_rows,li_identity
stringls_tablename,ls_default,ls_defaultvalue,ls_pbdttype
booleanlb_find
decld_uwidth,ld_prec,ld_uscale
stringls_types,ls_dbtype,ls_prikey,ls_name,ls_nulls,ls_msg,ls_title=of_constrpipesyntax()
nvo_stringlnv_string
nvo_datastorelds_vdtcolumns
booleanlb_key

lds_vdtcolumns=createnvo_datastore
lds_vdtcolumns.dataobject=d_vdtcolumns
lds_vdtcolumns.settransobject(SrcSqlca)
li=1

of_input(inv_attrib[li])
li_find=pos(inv_attrib[li].is_sqlsyntax,*,1)
ifli_find>0then
lds_vdtcolumns.retrieve(as_tablename)
of_filterimg(lds_vdtcolumns)
li_rows=lds_vdtcolumns.rowcount()
forlj=1toli_rows
ls_name=lds_vdtcolumns.getitemstring(lj,uname)
ls_types=lds_vdtcolumns.getitemstring(lj,udmname)
li_identity=lds_vdtcolumns.getitemnumber(lj,uidentity)
ls_types=of_getpipedbtype(is_s_dbtype,ls_types)
ls_pbdttype=of_getpbdttype(is_s_dbtype,ls_types)
choosecasels_types
casechar,varchar,nchar,nvarchar,longvarchar
ifls_types=longvarcharthenls_types=varchar
ld_uwidth=lds_vdtcolumns.getitemnumber(lj,uwidth)
ls_dbtype=ls_types+(+string(int(ld_uwidth))+)
casedecimal,numeric
ld_uwidth=lds_vdtcolumns.getitemnumber(lj,uwidth)
ld_uscale=lds_vdtcolumns.getitemnumber(lj,uscale)
ifli_identity=1then
ls_dbtype=identity+(+string(int(ld_uwidth))+,+string(int(ld_uscale))+)
else
ls_dbtype=ls_types+(+string(int(ld_uwidth))+,+string(int(ld_uscale))+)
endif
caseelse
ls_dbtype=ls_types
endchoose
ls_prikey=lds_vdtcolumns.getitemstring(lj,upkey)
ifls_prikey=Ythen
lb_key=true
ls_prikey=key=yes,
else
ls_prikey=
endif

ls_nulls=lds_vdtcolumns.getitemstring(lj,unulls)
ifls_nulls=Ythen
ls_nulls=yes
else
ls_nulls=no
endif

ls_default=isnull(lds_vdtcolumns.getitemstring(lj,udefault),)

ls_sourcesyntax+="COLUMN(type="+ls_pbdttype+",name=~""+ls_name+"~",dbtype=~""+ls_dbtype+"~","+ls_prikey+"nulls_allowed="+ls_nulls+")~r~n"
ifls_default=then
ifli_identity=1then
ls_destsyntax+="COLUMN(type="+ls_pbdttype+",name=~""+ls_name+"~",dbtype=~""+ls_dbtype+"~","+ls_prikey+"nulls_allowed="+ls_nulls+",initial_value=~"exclude~")~r~n"
else
ls_destsyntax+="COLUMN(type="+ls_pbdttype+",name=~""+ls_name+"~",dbtype=~""+ls_dbtype+"~","+ls_prikey+"nulls_allowed="+ls_nulls+")~r~n"
endif
else
ifli_identity=1then
ls_destsyntax+="COLUMN(type="+ls_pbdttype+",name=~""+ls_name+"~",dbtype=~""+ls_dbtype+"~","+ls_prikey+"nulls_allowed="+ls_nulls+",default_value=~""+ls_default+"~",initial_value=~"exclude~")~r~n"
else
ls_destsyntax+="COLUMN(type="+ls_pbdttype+",name=~""+ls_name+"~",dbtype=~""+ls_dbtype+"~","+ls_prikey+"nulls_allowed="+ls_nulls+",default_value=~""+ls_default+"~")~r~n"
endif
endif
next
else
return
endif
ls_sourcesyntax+=)
ls_destsyntax+=)

//generatePIPELINE
//example:
//PIPELINE(source_connect=csfdata,destination_connect=csfdata,type=replace,commit=100,errors=100,keyname="Bar_x")
iflb_keythen
ls_syntax+=PIPELINE(source_connect=+inv_attrib[li].is_sconnect+,destination_connect=+inv_attrib[li].is_dconnect+,type=+inv_attrib[li].is_ptype+,commit=+inv_attrib[li].is_pcommit+,errors=+inv_attrib[li].is_errors+,keyname="+as_tablename+_x")~r~n
else
ls_syntax+=PIPELINE(source_connect=+inv_attrib[li].is_sconnect+,destination_connect=+inv_attrib[li].is_dconnect+,type=+inv_attrib[li].is_ptype+,commit=+inv_attrib[li].is_pcommit+,errors=+inv_attrib[li].is_errors+)~r~n
endif

//generateSOURCE
//example:
//SOURCE(name="Bar",COLUMN(type=char,name="CustomCode",dbtype="char(8)",key=yes,nulls_allowed=no)
ls_syntax+=SOURCE(name="+inv_attrib[li].is_sname+",


ls_syntax+=ls_sourcesyntax


//generateRETRIEVE
//example:
//RETRIEVE(statement="SELECTBar.CustomCode,Bar.BarCode,Bar.ItemCode,Bar.Metering,Bar.PackSize,Bar.Length,Bar.Width,Bar.High,Bar.Vol,Bar.Weight,Bar.NewPackFlagFROMBar")
ls_syntax+=RETRIEVE(statement="+inv_attrib[li].is_sqlsyntax+")


//generateDESTINATION
//example:
//DESTINATION(name="Bar_copy",
//COLUMN(type=char,name="CustomCode",dbtype="char(8)",key=yes,nulls_allowed=no,initial_value="spaces")
ls_syntax+=DESTINATION(name="+inv_attrib[li].is_dname+",
ls_syntax+=ls_destsyntax

returnls_syntax

这个函数的前往值就是构建完成的管道语法了.



个中:初始化的函数:of_input(inv_attrib[li])


是初始化,inv_attrib的函数,初始化的数据次要是用户必要输出的前提,好比管道的type,commit,errors,select语句.

必要申明一下,个中处置了几个特别的情形的函数.


of_filterimg(lds_vdtcolumns):


过滤失落表中的image列,由于管道不撑持image数据传输.


of_getpipedbtype(is_s_dbtype,ls_types):


依据表中列的范例失掉管道中数据列的范例,由于他们不是老是逐一对应的.


这个能够经由过程一个extenddatawindowobject,并包括有初始数据来完成.


of_getpbdttype(is_s_dbtype,ls_types):
依据表中列的范例失掉管道中列的范例,由于他们也不是老是逐一对应的.
这个能够经由过程一个extenddatawindowobject,并包括有初始数据来完成.



管道语法构建完成了,就能够实行管道传输了:



this.syntax=失掉的语法

li_RC=this.Start(SrcSqlca,DestSqlca,idw_Errors)

Ifli_RC1Then
ifnotib_silencethenmsg(ls_title,"工具传输失利:"+string(li_rc))
of_addtransmsg(工具<+is_currentobj+>传输失利:+string(li_rc))
returnli_RC
rollback;
else
Commit;
Endif

提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-19 18:57:58 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-27 15:19:49 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
小妖女 该用户已被删除
地板
发表于 2015-2-5 09:14:20 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
简单生活 该用户已被删除
5#
发表于 2015-2-11 08:24:33 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
若相依 该用户已被删除
6#
发表于 2015-3-2 03:26:41 | 只看该作者
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
山那边是海 该用户已被删除
7#
发表于 2015-3-11 02:06:22 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
再现理想 该用户已被删除
8#
发表于 2015-3-17 19:04:42 | 只看该作者
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
兰色精灵 该用户已被删除
9#
发表于 2015-3-24 20:12:48 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表