详细的请看原贴 ^_^
说明:复制表(只复制结构,源表名:a 新表名:b)
SQL: select * into b from a where 1<>1
说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
SQL: insert into b(a, b, c) select d,e,f from b;
说明:显示文章、提交人和最后回复时间
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
说明:外连接查询(表名1:a 表名2:b)
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
说明:两张关联表,删除主表中已经在副表中没有的信息
SQL:
delete from info where not exists ( select * from infobz where info.infid=infobz.infid )
说明:--
SQL:
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROM TABLE1,
(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
(SELECT NUM, UPD_DATE, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,
WHERE X.NUM = Y.NUM (+)
AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WHERE A.NUM = B.NUM
说明:--
SQL:
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩
说明:
从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)
SQL:
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
FROM TELFEESTAND a, TELFEE b
WHERE a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')
说明:四表联查问题:
SQL:select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
说明:得到表中最小的未使用的ID号
SQL:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID
FROM Handle
WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
说明:复制表(只复制结构,源表名:a 新表名:b)
SQL: select * into b from a where 1<>1
说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
SQL: insert into b(a, b, c) select d,e,f from b;
说明:显示文章、提交人和最后回复时间
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
说明:外连接查询(表名1:a 表名2:b)
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
说明:两张关联表,删除主表中已经在副表中没有的信息
SQL:
delete from info where not exists ( select * from infobz where info.infid=infobz.infid )
说明:--
SQL:
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROM TABLE1,
(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
(SELECT NUM, UPD_DATE, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,
WHERE X.NUM = Y.NUM (+)
AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WHERE A.NUM = B.NUM
说明:--
SQL:
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩
说明:
从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)
SQL:
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
FROM TELFEESTAND a, TELFEE b
WHERE a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')
说明:四表联查问题:
SQL:select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
说明:得到表中最小的未使用的ID号
SQL:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID
FROM Handle
WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
初学ASP,程序是能勉强写出来了,但若每进行一次网站页面的改版,所有的源程序都将进行一次移植手术。为此所耗费的人力精力不计其数,甚至一不小心得不偿失、前功尽弃。
所以,梦想着那么大段的程序代码变成几个简单的字符代替,这样只要设计好页面把该功能插入就OK了。其实这也简单,只需将实现该功能的程序代码做成子程序,然后主页调用就可以了。
很多时候,在博客中国,你会选择到很多的模板,甚至有可能自己来设计;或者采用猪飞飞BLOG的各大站长都将其站点改得不近相同……这些,我们都归功于ASP采用模板的功能。
那下面偶就借花献佛,将模板拿来分析,以馈各位朋友。
首先,模板需要在线修改,则应采用数据库保存模板代码
所谓的模板,就是设计完工的标准的HTML代码,其中需要由程序实现的功能部分将采用特殊字符串代替。然,这些特殊字符串需要在显示的时候被编译为对应的功能。
2,假设第一模板内容代码
将下列代码拷贝到m_html字段中
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>testmb</title>
</head>
<body leftmargin="0" topmargin="0">
<table width="100%" height="100%" border="0" cellpadding="5"
cellspacing="2">
<tr align="right" bgcolor="#CCCCCC">
<td height="20" colspan="2">$cntop$</td>
</tr>
<tr valign="top">
<td width="25%" bgcolor="#e5e5e5">$cnleft$</td>
<td width="74%" bgcolor="#f3f3f3">$cnright$</td>
</tr>
</table>
</body>
</html>
注意$cntop$、$cnleft$、$cnright$,它们将要实现某些具体的程序功能
3,建立数据库连接文件conn.asp
<%
set conn= Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("testmb.mdb")
conn.Open connstr
%>
4,建立特殊字符串转换所需要的库文件lib.asp
该文件的主要作用是将实现某些功能的ASP程序做成字程序,以方便调用。
<%
dim topcode
sub cntop()
topcode="现在时间是:"
topcode=topcode&now()
end sub
dim leftcode,i
sub cnleft()
for i = 1 to 5
leftcode=leftcode&"<p>cnbruce.com"
next
end sub
dim rightcode
sub cnright()
for i = 1 to 9
rightcode=rightcode&"<hr color="&i&i&i&i&i&i&">"
next
end sub
%>
5,最后,调用数据库中的模板代码,将特殊字符串转换。
<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->
<%
sql="select * from moban where m_id=1"
set rs=Server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1
mb_code=rs("m_html")
rs.close
set rs=nothing
cntop()
mb_code=replace(mb_code,"$cntop$",topcode)
cnleft()
mb_code=replace(mb_code,"$cnleft$",leftcode)
cnright()
mb_code=replace(mb_code,"$cnright$",rightcode)
response.write mb_code
%>
该页主要作用是将模板代码进行显示,并将其中的特殊代码转变为相对应子程序功能。
至此,ASP的模板功能基本完成,剩下的就是:建立具备编辑模板功能的程序页面,将库文件改变为自己所需要程序功能……
所以,梦想着那么大段的程序代码变成几个简单的字符代替,这样只要设计好页面把该功能插入就OK了。其实这也简单,只需将实现该功能的程序代码做成子程序,然后主页调用就可以了。
很多时候,在博客中国,你会选择到很多的模板,甚至有可能自己来设计;或者采用猪飞飞BLOG的各大站长都将其站点改得不近相同……这些,我们都归功于ASP采用模板的功能。
那下面偶就借花献佛,将模板拿来分析,以馈各位朋友。
首先,模板需要在线修改,则应采用数据库保存模板代码
所谓的模板,就是设计完工的标准的HTML代码,其中需要由程序实现的功能部分将采用特殊字符串代替。然,这些特殊字符串需要在显示的时候被编译为对应的功能。
2,假设第一模板内容代码
将下列代码拷贝到m_html字段中
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>testmb</title>
</head>
<body leftmargin="0" topmargin="0">
<table width="100%" height="100%" border="0" cellpadding="5"
cellspacing="2">
<tr align="right" bgcolor="#CCCCCC">
<td height="20" colspan="2">$cntop$</td>
</tr>
<tr valign="top">
<td width="25%" bgcolor="#e5e5e5">$cnleft$</td>
<td width="74%" bgcolor="#f3f3f3">$cnright$</td>
</tr>
</table>
</body>
</html>
注意$cntop$、$cnleft$、$cnright$,它们将要实现某些具体的程序功能
3,建立数据库连接文件conn.asp
<%
set conn= Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("testmb.mdb")
conn.Open connstr
%>
4,建立特殊字符串转换所需要的库文件lib.asp
该文件的主要作用是将实现某些功能的ASP程序做成字程序,以方便调用。
<%
dim topcode
sub cntop()
topcode="现在时间是:"
topcode=topcode&now()
end sub
dim leftcode,i
sub cnleft()
for i = 1 to 5
leftcode=leftcode&"<p>cnbruce.com"
next
end sub
dim rightcode
sub cnright()
for i = 1 to 9
rightcode=rightcode&"<hr color="&i&i&i&i&i&i&">"
next
end sub
%>
5,最后,调用数据库中的模板代码,将特殊字符串转换。
<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->
<%
sql="select * from moban where m_id=1"
set rs=Server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1
mb_code=rs("m_html")
rs.close
set rs=nothing
cntop()
mb_code=replace(mb_code,"$cntop$",topcode)
cnleft()
mb_code=replace(mb_code,"$cnleft$",leftcode)
cnright()
mb_code=replace(mb_code,"$cnright$",rightcode)
response.write mb_code
%>
该页主要作用是将模板代码进行显示,并将其中的特殊代码转变为相对应子程序功能。
至此,ASP的模板功能基本完成,剩下的就是:建立具备编辑模板功能的程序页面,将库文件改变为自己所需要程序功能……
习惯于过程式的开发,一直向往着面向对象。无奈半路出家人,没有一点内力基础,看了一大堆面向对象的书也只是看得一头雾水。对于MVC的概念也是偶然了解到的,感觉能和WEB开发结合起来让项目面向对象化。以下是我一点点心得。
先介绍一下MVC的概念:
MVC(Model-View-Controller),即把一个应用的输入、输出、处理流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
模型(Model):就是业务流程/状态的处理以及业务规则的制定。即是MVC的主要核心。
视图(View):代表用户交互界面,也就是Web的HTML界面。
控制(Controller):可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。
以下以一个简单的留言板作为分析例子。
1)从上面的概念来看,留言板可以切成三部份。
模型(M):包含 数据库链接、数据添加修改删除操作。
视图(V):包含 各种界面,如(留言板列表,管理控制页面,添加修改删除界面等一切用户看得到的页面。)
控制(C):包含 接到由视图(V)发送过来的请求,转给模型(M),然后根据模型(M)的反馈决定显示界面。
2)三部份已经出来,下面是更进一步的细化。
模型(M)
数据链接:数据链接参数、链接失败处理、SQL注入防御处理、日文字符替换处理。
数据操作:留言的添加删除修改操作、管理员帐号管理、留言板系统设定,操作完毕后以约定好的编码方式返回操作结果。
文件操作:留言板样式设定、版权设定、搜索引擎关键字设定、留言板标题设定。(由于资料更新不多,但读取频繁,故使用文件方式保存)
视图(V)
留言添加页:判断留言者是否管理员、判断本次留言是回复还是新建留言。
留言管理页:批量删除留言、查询留言、。
留言显示页:判断留言是否为管理员专用、判断本留言是否为管理员发布、是否允许回复、是否显示留言者的敏感资料、留言是否需要审核后再显示。
控制(C)
数据操作:接收添加资料,转交给模型(M)里数据操作中留言操作方法,并获取约定好的编码告诉留言者是否留言成功。
文件操作:获取设定类型,转交给模型(M)里文件操作的对应操作方法,并获取约定好的编码告诉管理员是否设定成功与下一步操作。
3)系统基本上细化完毕,下一步就是将以上分析出来的东西封装成Class
模型(M):
数据库链接部份可以全部封装成一个Class,
数据操作部份则是把留言的添加删除修改操作部份封成一个Class
管理员帐号管理及留言板设定封装成一个Class
文件操作部份则可以全封装成一个Class
视图(V):
视图部可均是以文件模式出现,也可以将部份代码封装后引用。也可以引用现有的模板类实现代码分离等。
控制(C):
由于直接操作,可以避免使用Class,而是以文件模式出现,每个文件处理模型(M)中的某个类。并完成控制(C)的工作。
操作结果编码可以作成一个集合来引用。
先介绍一下MVC的概念:
MVC(Model-View-Controller),即把一个应用的输入、输出、处理流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
模型(Model):就是业务流程/状态的处理以及业务规则的制定。即是MVC的主要核心。
视图(View):代表用户交互界面,也就是Web的HTML界面。
控制(Controller):可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。
以下以一个简单的留言板作为分析例子。
1)从上面的概念来看,留言板可以切成三部份。
模型(M):包含 数据库链接、数据添加修改删除操作。
视图(V):包含 各种界面,如(留言板列表,管理控制页面,添加修改删除界面等一切用户看得到的页面。)
控制(C):包含 接到由视图(V)发送过来的请求,转给模型(M),然后根据模型(M)的反馈决定显示界面。
2)三部份已经出来,下面是更进一步的细化。
模型(M)
数据链接:数据链接参数、链接失败处理、SQL注入防御处理、日文字符替换处理。
数据操作:留言的添加删除修改操作、管理员帐号管理、留言板系统设定,操作完毕后以约定好的编码方式返回操作结果。
文件操作:留言板样式设定、版权设定、搜索引擎关键字设定、留言板标题设定。(由于资料更新不多,但读取频繁,故使用文件方式保存)
视图(V)
留言添加页:判断留言者是否管理员、判断本次留言是回复还是新建留言。
留言管理页:批量删除留言、查询留言、。
留言显示页:判断留言是否为管理员专用、判断本留言是否为管理员发布、是否允许回复、是否显示留言者的敏感资料、留言是否需要审核后再显示。
控制(C)
数据操作:接收添加资料,转交给模型(M)里数据操作中留言操作方法,并获取约定好的编码告诉留言者是否留言成功。
文件操作:获取设定类型,转交给模型(M)里文件操作的对应操作方法,并获取约定好的编码告诉管理员是否设定成功与下一步操作。
3)系统基本上细化完毕,下一步就是将以上分析出来的东西封装成Class
模型(M):
数据库链接部份可以全部封装成一个Class,
数据操作部份则是把留言的添加删除修改操作部份封成一个Class
管理员帐号管理及留言板设定封装成一个Class
文件操作部份则可以全封装成一个Class
视图(V):
视图部可均是以文件模式出现,也可以将部份代码封装后引用。也可以引用现有的模板类实现代码分离等。
控制(C):
由于直接操作,可以避免使用Class,而是以文件模式出现,每个文件处理模型(M)中的某个类。并完成控制(C)的工作。
操作结果编码可以作成一个集合来引用。








