快速业务通道

面试准备之SQL 6 —— 存储过程

作者 佚名技术 来源 数据库编程 浏览 发布时间 2012-03-21

1.什么是存储过程?

存储过程是一次编译可多次运行(存储过程存放在服务器中),预编译好的集合,运行速度快。

 2.常用系统存储过程

代码
-- Purpose: 常用系统存储过程使用

EXEC sp_databases  --列出当前系统中的数据库

EXEC  sp_renamedb ''test'',''test1''--改变数据库名称(单用户访问)

USE stuDB
GO

EXEC sp_tables  --当前数据库中查询的对象的列表

EXEC sp_columns stuInfo  --返回某个表列的信息

EXEC sp_help stuInfo  --查看表stuInfo的信息

EXEC sp_helpconstraint stuInfo --查看表stuInfo的约束

EXEC sp_helpindex stuMarks  --查看表stuMarks的索引

EXEC sp_helptext ''view_stuInfo_stuMarks'' --查看视图的语句文本

EXEC sp_stored_PRocedures  --返回当前数据库中的存储过程列表
 

 

use master
go
exec xp_cmdshell ''mkdir D:\bank'',no_output--创建文件夹
 

 3.自定义存储过程

(1.)不带参数的存储过程

代码
use studb
go
if exists(select * from sysobjects where name=''proc_stu'')
drop proc proc_stu
go

create procedure proc_stu
 AS
    DECLARE @writtenAvg float,@labAvg float --笔试和机试平均分变量
    SELECT @writtenAvg=AVG(writtenExam), @labAvg=AVG(labExam) FROM stuMarks
    print ''笔试平均分:''+convert(varchar(5),@writtenAvg) 
    print ''机试平均分:''+convert(varchar(5),@labAvg)
    IF (@writtenAvg>70 AND @labAvg>70)
       print ''本班考试成绩:优秀''
    ELSE
       print ''本班考试成绩:较差''
    print ''--------------------------------------------------''
    print ''           参加本次考试没有通过的学员:''
    SELECT stuName,stuInfo.stuNo,writtenExam,labExam FROM  stuInfo
      INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
         WHERE writtenExam<60 OR labExam<60
GO

exec proc_stu --执行存储过程
(2.)带输入参数的存储过程

代码
USE stuDB
GO
/*---检测是否存在:存储过程存放在系统表sysobjects中---*/
IF EXISTS (SELECT * FROM sysobjects WHERE name = ''proc_stu'' )
  DROP PROCEDURE  proc_stu
GO
/*---创建存储过程----*/
CREATE PROCEDURE proc_stu
  @writtenPass int,
  @labPass int-- 可以添加默认值 这样 执行可以是这样的 exec proc_stu 不用指定参数了
  AS
    print ''笔试及格线:''+convert(varchar(5),@writtenPass)
    print ''机试及格线:''+convert(varchar(5),@labPass)
    print ''--------------------------------------------------''
    print ''           参加本次考试没有通过的学员:''
    SELECT stuName,stuInfo.stuNo,writtenExam,labExam FROM  stuInfo
      INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
         WHERE writtenExam<@writtenPass OR labExam<@labPass
GO

exec proc_stu 60,55
exec proc_stu 60,@labPa

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号