国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

面試準(zhǔn)備之SQL 6 —— 存儲過程

2019-11-03 08:34:21
字體:
供稿:網(wǎng)友

1.什么是存儲過程?

存儲過程是一次編譯可多次運(yùn)行(存儲過程存放在服務(wù)器中),預(yù)編譯好的集合,運(yùn)行速度快。

 2.常用系統(tǒng)存儲過程

代碼
-- Purpose: 常用系統(tǒng)存儲過程使用

EXEC sp_databases  --列出當(dāng)前系統(tǒng)中的數(shù)據(jù)庫

EXEC  sp_renamedb 'test','test1'--改變數(shù)據(jù)庫名稱(單用戶訪問)

USE stuDB
GO

EXEC sp_tables  --當(dāng)前數(shù)據(jù)庫中查詢的對象的列表

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  --返回當(dāng)前數(shù)據(jù)庫中的存儲過程列表
 

 

use master
go
exec xp_cmdshell 'mkdir D:/bank',no_output--創(chuàng)建文件夾
 

 3.自定義存儲過程

(1.)不帶參數(shù)的存儲過程

代碼
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 --筆試和機(jī)試平均分變量
    SELECT @writtenAvg=AVG(writtenExam), @labAvg=AVG(labExam) FROM stuMarks
    print '筆試平均分:'+convert(varchar(5),@writtenAvg) 
    print '機(jī)試平均分:'+convert(varchar(5),@labAvg)
    IF (@writtenAvg>70 AND @labAvg>70)
       print '本班考試成績:優(yōu)秀'
    ELSE
       print '本班考試成績:較差'
    print '--------------------------------------------------'
    print '           參加本次考試沒有通過的學(xué)員:'
    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 --執(zhí)行存儲過程
(2.)帶輸入?yún)?shù)的存儲過程

代碼
USE stuDB
GO
/*---檢測是否存在:存儲過程存放在系統(tǒng)表sysobjects中---*/
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'proc_stu' )
  DROP PROCEDURE  proc_stu
GO
/*---創(chuàng)建存儲過程----*/
CREATE PROCEDURE proc_stu
  @writtenPass int,
  @labPass int-- 可以添加默認(rèn)值 這樣 執(zhí)行可以是這樣的 exec proc_stu 不用指定參數(shù)了
  AS
    print '筆試及格線:'+convert(varchar(5),@writtenPass)
    print '機(jī)試及格線:'+convert(varchar(5),@labPass)
    print '--------------------------------------------------'
    print '           參加本次考試沒有通過的學(xué)員:'
    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,@labPass=55
exec proc_stu @writtenPass=60,@labPass=55
exec proc_stu @writtenPass=60,55--這一行會報(bào)錯 :必須傳遞參數(shù) 2,并以 '@name = value' 的形式傳遞后續(xù)的參數(shù)。
--  一旦使用了 '@name = value' 形式之后,所有后續(xù)的參數(shù)就必須以 '@name = value' 的形式傳遞

 

(3.)帶輸出參數(shù)的存儲過程

代碼
USE stuDB
GO
/*---檢測是否存在:存儲過程存放在系統(tǒng)表sysobjects中---*/
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'proc_stu' )
  DROP PROCEDURE  proc_stu
GO
/*---創(chuàng)建存儲過程----*/
CREATE PROCEDURE proc_stu
  @notpassSum int OUTPUT, --OUTPUT關(guān)鍵字,否則視為輸入?yún)?shù)
  @writtenPass int=60,  --默認(rèn)參數(shù)放后
  @labPass int=60       --默認(rèn)參數(shù)放后
  AS
    print '筆試及格線:'+convert(varchar(5),@writtenPass)
       + '   機(jī)試及格線:'+convert(varchar(5),@labPass)
    print '--------------------------------------------------'
    print '           參加本次考試沒有通過的學(xué)員:'
    SELECT stuName,stuInfo.stuNo,writtenExam,labExam FROM  stuInfo
      INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
         WHERE writtenExam<@writtenPass OR labExam<@labPass
    /*--統(tǒng)計(jì)并返回沒有通過考試的學(xué)員人數(shù)--*/
    SELECT @notpassSum=COUNT(stuNo)FROM stuMarks
      WHERE writtenExam<@writtenPass OR labExam<@labPass
   
GO

/*---調(diào)用存儲過程----*/
DECLARE @sum int
EXEC proc_stu @sum OUTPUT ,64   --機(jī)試及格線采用默認(rèn)值:筆試及格線64分,機(jī)試及格線60分。
print '--------------------------------------------------'
IF @sum>=3
  print '未通過人數(shù):'+convert(varchar(5),@sum)+ '人,超過60%,及格分?jǐn)?shù)線還應(yīng)下調(diào)'
ELSE
  print '未通過人數(shù):'+convert(varchar(5),@sum)+ '人,已控制在60%以下,及格分?jǐn)?shù)線適中'
GO


 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 班戈县| 宜川县| 汉川市| 板桥市| 万源市| 焉耆| 青冈县| 佳木斯市| 临澧县| 青川县| 科技| 怀安县| 图木舒克市| 新郑市| 明水县| 盐源县| 淮滨县| 阿克苏市| 贵港市| 嘉祥县| 大邑县| 会理县| 石首市| 昌吉市| 屏东县| 沁源县| 淳化县| 镶黄旗| 武陟县| 仁布县| 黄大仙区| 大冶市| 剑阁县| 西畴县| 西和县| 延川县| 卢龙县| 许昌县| 石渠县| 象山县| 巍山|