定义存储过程
利用SQL的语言可以编写对于数据库访问的存储过程,其语法如下:
CREATE
PROC[EDURE] procedure_name [;number]
[
{@parameter
data_type} ][VARYING] [= default][OUTPUT]
[,...n]
[WITH
{
RECOMPILE
|
ENCRYPTION
|
RECOMPILE, ENCRYPTION
}
[FOR
REPLICATION]
AS
sql_statement
[...n]
[
]内的内容是可选项,而()内的内容是必选项,
例:若用户想建立一个删除表tmp中的记录的存储过程Select_delete可写为:
Create
Proc select_del As
Delete
tmp
例:用户想查询tmp表中某年的数据的存储过程
create
proc select_query @year int as
select
* from tmp where year=@year
在这里@year是存储过程的参数
例:该存储过程是从某结点n开始找到最上层的父亲结点,这种经常用到的过程可以由存储过程来担当,在网页中重复使用达到共享。
空:表示该结点为顶层结点
fjdid(父结点编号)
结点n 非空:表示该结点的父亲结点号
dwmc(单位名称)
CREATE
proc search_dwmc @dwidold int,@dwmcresultvarchar(100) output
as
declare
@stop int
declare
@result varchar(80)
declare
@dwmc varchar(80)
declare
@dwid int
set
nocount on
set
@stop=1
set
@dwmc=""
select
@dwmc=dwmc,@dwid=convert(int,fjdid) from jtdwwhere id=@dwidold
set
@result=rtrim(@dwmc)
if
@dwid=0
set
@stop=0
while
(@stop=1) and (@dwid<>0)
begin
set
@dwidold=@dwid
select
@dwmc=dwmc,@dwid=convert(int,fjdid) from jtdwwhere id=@dwidold
if
@@rowcount=0
set
@dwmc=""
else
set
@result=@dwmc+@result
if
(@dwid=0) or (@@rowcount=0)
set
@stop=0
else
continue
end
set
@dwmcresult=rtrim(@result)
使用exec pro-name [pram1 pram2.....
-----------------------------------------------------------------
在数据库中进行分页操作时@pagesize
每页有多少条数据 @pageindex你要查第几页的数据
select top(@pagesize) * from Ticket where not markno in (select
top(@pagesize*(@pageindex-1)) markno from ticket)这句话分为三个部分第一部分是主句:select
top(@pagesize) * from Ticket第二部分是条件:not markno 第三部分是一个子查询 (select top(@pagesize*(@pageindex-1)) markno from ticket) 要整个解释这句话就要如下解析主要目的是取头X条信息:X由pagesize的值决定;接着我们要限定一个条件,not markno in这其实是一个否定,mark no不在某些范围内的,接着我们要限定markno 不在的范围是哪些呢?就是select top(@pagesize*(@pageindex-1))
markno from ticket取前 @pagesize*(@pageindex-1) 的makrkno的值SQL的执行顺序按照括号优先级,从内自外执行的,所以执行的顺序及结果就是——先取出前n-1行数据的markno,然后取出不包含这些markno的数据,最后从这里面取出前10行