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

首頁 > 開發(fā) > 綜合 > 正文

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

2024-07-21 02:45:15
字體:
供稿:網(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--這一行會報錯 :必須傳遞參數(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ā)表
主站蜘蛛池模板: 彝良县| 漳平市| 安顺市| 武陟县| 久治县| 云阳县| 库伦旗| 沿河| 阜康市| 十堰市| 页游| 峨山| 日照市| 元阳县| 鄂温| 通榆县| 许昌市| 长春市| 安图县| 抚松县| 南溪县| 逊克县| 山阳县| 太仆寺旗| 镇沅| 平武县| 会泽县| 甘孜县| 准格尔旗| 湄潭县| 梁平县| 扶绥县| 红原县| 綦江县| 台南市| 南充市| 开鲁县| 平湖市| 得荣县| 赤城县| 兴和县|