|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQL Server还有更多的扩展,可以用存储过程,数据库大小无极限限制。存储进程|存储进程 进修利用存储进程(Stored Procedure),是ASP法式员的必需课之一。
一切的大型数据库都撑持存储进程,好比Oracle、MS SQL等,(但MS Access不撑持,不外,在Access里可使用参数化的查询)。
存储进程是使用SQL Server所供应的Tranact-SQL言语所编写的法式。Tranact-SQL言语是SQL Server供应专为设计数据库使用法式的言语,它是使用法式和SQL Server数据库间的次要法式式设计界面。它比如Oracle数据库体系中的Pro-SQL和Informix的数据库体系可以中的Informix-4GL言语一样。这类言语次要供应以下功效,让用户可以设计出合适援用需求的法式:
1)、变量申明
2)、ANSI兼容的SQL号令(如Select,Update….)
3)、普通流程掌握号令(if…else…、while….)
4)、外部函数
存储进程的书写格
CREATE PROCEDURE [具有者.]存储进程名[;法式编号]
[(参数#1,…参数#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 法式行
个中存储进程名不克不及超越128个字。每一个存储过程当中最多设定1024个参数(SQL Server 7.0以上版本),参数的利用办法以下:
@参数名 数据类型 [VARYING] [=内定值] [OUTPUT]
每一个参数名前要有一个“@”符号,每个存储进程的参数仅为该法式外部利用,参数的类型除IMAGE外,其他SQL Server所撑持的数据类型都可以使用。
[=内定值]相当于咱们在创立数据库时设定一个字段的默许值,这里是为这个参数设定默许值。[OUTPUT]是用来指定该参数是既有输出又有输入值的,也就是在挪用了这个存储进程时,假如所指定的参数值是咱们需求输出的参数,同时也需求在了局中输入的,则该项必需为OUTPUT,而假如只是做输入参数用,可以用CURSOR,同时在利用该参数时,必需指定VARYING和OUTPUT这两个语句。
CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS
SELECT @p_tot = sum(Unitprice*Quantity)
FROM orderdetails
WHERE ordered=@o_id
该例子是创立一个复杂的存储进程order_tot_amt,这个存储进程依据用户输出的订单ID号码(@o_id),由订单明细表(orderdetails)上钩算该订单发卖总额[单价(Unitprice)*数目(Quantity)],这一金额经由过程@p_tot这一参数输入给挪用这一存储进程的法式
利用存储进程有很多优点,它可以封装庞杂的数据逻辑,充实发扬大型数据库自己的优势。
咱们晓得,ASP其实不合适做庞杂的数据运算,而经由过程OLD DB会见数据库,因为数据需求在ASP和数据库之间传递,相当损耗体系资本。
现实上,假如数据库仅仅起着数据存储的感化,那末它的功效是远远没有失掉使用的。
关于若何创立存储进程,请参考MS SQL的相干文档。
本文引见存储进程若何在ASP中应用。
复杂的一个SQL语句:
select ID,Name,Picture,Time,Duty from employ
咱们可以创立一个存储进程:
CREATE PROCEDURE sp_employ
AS
select ID,Name,Picture,Time,Duty from employ
Go
而SQL语句:
select ID,Name,Picture,Time,Duty from employ where ID=10230
对应的存储进程是:(用Alter交换咱们已有的存储进程)
ALTER PROCEDURE sp_employ
@inID int
AS
select ID,Name,Picture,Time,Duty from employ where ID=@inID
Go
上面对照一下SQL和存储进程在ASP中的情形。起首看看直接履行SQL的情形:
<%
dim Conn, strSQL, rs
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=webData;uid=user;pwd=password"
strSQL = "select ID,Name,Picture,Time,Duty from employ "
Set rs = Conn.Execute(strSQL)
%>
再看看若何履行Stored Procedure:
<%
dim Conn, strSQL, rs
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=webData;uid=user;pwd=password" ’make connection
strSQL = "sp_employ"
Set rs = Conn.Execute(strSQL)
%>
而履行带参数的Stored Procedure也是相当相似的:
<%
dim Conn, strSQL, rs, myInt
myInt = 1
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=webData;uid=user;pwd=password"
strSQL = "sp_myStoredProcedure " & myInt
Set rs = Conn.Execute(strSQL)
%>
在SQL Server中履行存储进程
在SQL Server的查询剖析器中,输出以下代码:
declare @tot_amt int
execute order_tot_amt 1,@tot_amt output
select @tot_amt
以上代码是履行order_tot_amt这一存储进程,以盘算出订单编号为1的订单发卖金额,咱们界说@tot_amt为输入参数,用来承接咱们所要的了局
在ASP中挪用存储进程
<!--必需加载adovbs.inc文件,不然将失足-->
<!--#include file="adovbs.inc"-->
<%
dim objCnn
dim objCmd
dim Rs
const o_id=112
'-----创立Connection对象----------
set objCnn=Server.CreateObject("Adodb.connection")
objCnn.Open "driver={sql server};server=localhost;uid=sa;pwd=cncanet;database=check;"
'-----创立Command对象-----------
set objCmd=Server.CreateObject("Adodb.Command")
objCmd.ActiveConnection=objCnn
objCmd.CommandText="order_tot_amt" '指定存储进程称号
objCmd.CommandType=adCmdStoredProc '其为Stored Procedure
'-----筹办stored procedure 的参数-------
objCmd.Parameters.Append _
objCmd.CreateParameter("o_id",adInteger,adParamInput,,o_id)
objCmd.Parameters.Append _
objCmd.CreateParameter("p_tot",adBigInt,adParamOutput,,0)
'-----履行存储进程----------------------
objCmd.Execute
'-----输入参数和处置了局--------------
for each parm in objCmd.Parameters
Response.Write parm.name &a</p> ASP脚本是采用明文(plain text)方式来编写的。 |
|