您的位置:首页 > 数据库

存储过程定义以及如何用SQL写一些存储过程实例

2009-06-26 23:36 525 查看
存储过程

定义:是一个被命名的存储在服务器上的Transact-SQL语句的集合,是封装重复性工作的一种方法。
它支持用户声明变量、条件执行和其他强大的编程功能。
一、 存储过程的优点:允许模块化程序设计,允许更快的执行,减少网络流量。
二、 系统常见的存储过程及其作用:
sp_databases --列出服务器上的所有数据库
sp_helpdb --报告有关数据库或者所有数据库的信息
sp_renamedb--更改数据库名称 eg: sp_renamedb bank,bank2(新名称)
sp_tables --列出当前环境中所有可以查询的对象
sp_columns--返回某个表列的信息
sp_table--返回某个表的全部信息
sp_help--返回某个表的全部信息
sp_helpconstraint--返回某个表的约束
sp_helpindex--返回某个表的全部索引
sp_stored_procedures--列出当前环境中的所有存储过程
sp_password --添加或修改登录帐户的密码 (eg:sp_password test(旧密码),test1(新密码),test(登陆账号))
或者:(sp_password @new = test1,@loginame = test)注:旧密码可以省略

-------------------------------------------------------------------------

sp_server_info --列出服务器信息,如字符集,版本和排列顺序
sp_start_job --立即启动自动化任务
sp_stop_job --停止正在执行的自动化任务
sp_password --添加或修改登录帐户的密码
sp_configure --显示(不带选项)或更改(带选项)当前服务器的全局配置设置

sp_helptext --显示规则,默认值,未加密的存储过程,用户定义的函数,
xp_cmdshell--运行DOC命令(2005此命令需要启用外围配置器方可使用该命令)(eg:xp_cmdshell 'net BBEservice')
或者用SQL语句启用该命令:
sp_Configure 'show advanced options', 1;
GO
RECONFIGURE 'xp_cmdshell',1;
GO
reconfigure;
go

三、 用户自定义的存储过程
除了使用系统存储过程,用户还可以创建自己的存储过程。创建存储过程的语句为:create procedure
1. 创建不带参数的存储过程
创建存储过程语法:
create proc[edure] 存储过程名
[{@参数 数据类型}[=默认值][output],
........
{@参数N 数据类型}[=默认值][output]]
as sql语句

例句:
if exists(select * from sysobjects where name='proc_stu')
drop proc(edure) proc_stu
go
create proc(edure) proc_stu
as
declare @avgage float;
select @avgAge=avg(stuage) from stuinfo
if (@avgage>20)
begin
print '平均年龄大于岁,年龄最大的为'
select top 1 stuname from stuinfo order by stuage desc
end
else
begin
print '平均年龄不到岁,年龄最小的为'
select top 1 stuname from stuinfo order by stuage
end

2. 创建带输入参数的存储过程
if exists(select * from sysobjects where name='proc_stu2')
drop procedure proc_stu2
go
create procedure proc_stu2
@age int
as
declare @avgage float;
select @avgAge=avg(stuage) from stuinfo
if (@avgage>@age)
begin
print '平均年龄大于'+convert(varchar,@age)+'岁,年龄最大的为'
select top 1 stuname from stuinfo order by stuage desc
end
else
begin
print '平均年龄不到'+convert(varchar,@age)+'岁,年龄最小的为'
select top 1 stuname from stuinfo order by stuage
end
exec proc_stu2 22

SQL创建表过程一些实例:

create table tbl_sys_dd
(
iRecNo int not null identity(1,1) primary key,
sNo varchar(10) ,
sName varchar(100) ,
sKind varchar(1)  ,
sUseFlag varchar(1) ,
iParentNo varchar(10)

)

create table tbl_sys_fee
(
feeno varchar(20) not null primary key,--费用编号(主键)
pfeeno varchar(20), --父费用号
counttype varchar(1), --计算类型(自动、手动)
sFeeName varchar(100) ,--收费项目名称
iPhaseId varchar(20), --所处审批阶段ID
sCountCondition varchar(200), --条件范围描述格式
sCountResult varchar(200), --计算值描述格式
sCountKind varchar(1) ,--计算方式
fLowPrice int, --最低收费标准
fHighPrice int ,--最高收费标准
sConditionItem varchar(20), --条件对应的相关项编号
sConditionKind varchar(1) --条件对应相关项的类型

)

create table tbl_sys_flowfee
(
sInfoNo varchar(20) not null primary key,--项目流水号(主键)
sFeeNo varchar(20), --收费项目大类编号(主键)
sSubFeeNo varchar(20), --收费项目小类编号(主键)
iPhaseId varchar(20), --所处的审批阶段ID(主键)
srelationitem varchar(10), --计算相关项的数量
sConditionItem varchar(10), --条件相关项的编号
fAmount1 char(18), --条件相关项的数量
fAccount char(18) --收费金额

)

create table tbl_sys_flowstep
(
sinfono varchar(20)  not null,--项目流水号(主键)
iPhaseId varchar(20)  not null,--审批阶段序号(主键)
sItemNo varchar(20)  not null,--审批事项编号(主键)
orderid int  not null primary key (sinfono,iPhaseId,sItemNo,orderid),--审批顺序序号(主键)
sWinNo varchar(20), --审批窗口编号
type varchar(1), --审批类别
itemname varchar(50) ,--审批事项名称
currentflag varchar(1), --当前状态
begintime datetime, --开始时间
endtime datetime, --结束时间
auditperson varchar(20), --审批人
auditmemo varchar(500),-- 审批意见
iglidenum varchar(20) --相关办件编号

)

create table tbl_sys_phase
(
iPhaseId varchar(20) not null  primary key, --审批阶段序号[审批类别编号+两位自增序号]
sPhaseName varchar(100), --审批阶段名称
sMemo varchar(200), --备注
sUseFlag varchar(1), --启用标志[0 启用 1 禁用]

)

create table tbl_sys_projectinfo
(
sInfoNo varchar(20),-- 项目流水号
sProjectName varchar(100),-- 项目名称
sBuildDept varchar(100),-- 建设单位名称
sProjectAddr varchar(100),-- 工程地址
sCorporation varchar(50),-- 项目法人
sTel1 varchar(20) ,--法人电话
sLinkMan varchar(50),-- 联系人姓名
sTel2 varchar(20),-- 联系人电话
sLandKind varchar(50),-- 用地性质
sProjectKind varchar(50) not null  primary key,-- 工程性质(主键)
sLevelKind varchar(50),-- 土地级、类
fBargainPrice decimal(16,2),-- 土地成交价
fAreaNum1 decimal(16,4),-- 用地面积
fAreaNum2 decimal(16,4),-- 建筑总面积
sBuildStruct varchar(10),-- 建筑结构
iFloorNum int ,--建筑层数
fProjectCost decimal(16,2),-- 建筑工程造价/万元
fAreaNum3 decimal(16,4),-- 经营类建筑面积
fAreaNum4 decimal(16,4),-- 工业类建筑面积
fAreaNum5 decimal(16,4),-- 办公类建筑面积
fAreaNum6 decimal(16,4),-- 住宅类建筑面积
sBuildAdvice varchar(200) ,--牵头窗口核定类别意见
sFirstAdvice varchar(200),-- 牵头窗口核定类别结果
sCheckMan varchar(10),-- 核定人员编号
dCheckDate DateTime ,--核定日期
sAuditAdvice varchar(200),-- 中心审定意见
sAuditMan varchar(10),-- 中心审定人员编号
dAuditDate DateTime,-- 审定日期
Create_date DateTime ,--登记时间
Audit_Result varchar(1) ,--审定结果(0 未审批 1信息符合 2信息不符合)
iAcceptTime int ,--工程的整个承诺时间
Audit_type varchar(10)-- 项目类型

)

create table tbl_sys_relationitem
(
SINFONO varchar(20) not null,--项目流水号(主键)
SRELATIONITEM varchar(10) not null primary key(SINFONO,SRELATIONITEM), --相关项编号(主键)
FAMOUNT decimal(9,2) --相关项数量

)

create table tbl_sys_step
(
sPhaseId varchar(20) not null,
sItemNo  varchar(20) not null,
orderid int not null primary key(sPhaseId,sItemNo,orderid),
sWinNo varchar(20),
type varchar(1) ,
sIsFirst varchar(1),
itemname varchar(20)

)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐