美文网首页心理散文想法
Sql Server数据库编程存储过程实现和调用

Sql Server数据库编程存储过程实现和调用

作者: Cache_wood | 来源:发表于2021-12-11 10:58 被阅读0次

@[toc]


存储过程的实现和调用

设置关系表

之前的作业中已经设计过关系表,这里继续沿用之前设计的关系表

期末计算GPA并分段统计,选出年度三好学生
if (exists (select * from sys.objects where name = 'prt_stu_gpa'))
    DROP PROCEDURE prt_stu_gpa
go
Create procedure prt_stu_gpa as
begin 
    declare @v_no char(6),@v_gpa float
    declare s_cur cursor for select Sno,round(sum(Ccredit*Grade/25.0)/sum(Ccredit),2) as gpa
    from Course19377056,Sc19377056 where Course19377056.Cno = Sc19377056.Cno and Grade>=60
    group by Sno

    open s_cur
    fetch s_cur into @v_no,@v_gpa
    while (@@FETCH_STATUS=0)
    begin
        if (@v_gpa>=3.6) 
            begin
                print @v_no + convert(char(8),@v_gpa) + '成绩优秀'  
                print @v_no + '是优秀学生'
            end
        else if (@v_gpa>=3.2) print @v_no + convert(char(8),@v_gpa) + '成绩合格'
        else                print @v_no  + convert(char(8),@v_gpa) + '成绩不合格'
        fetch s_cur into @v_no,@v_gpa
    end
    close s_cur
    deallocate s_cur
end

Exec prt_stu_gpa
go
S001  3.6     成绩优秀
S001  是优秀学生
S002  2.98    成绩不合格
S003  3.17    成绩不合格
S101  3.15    成绩不合格
S201  2.64    成绩不合格
S202  3.44    成绩合格
S203  3.34    成绩合格
S301  3.44    成绩合格
S302  3.84    成绩优秀
S302  是优秀学生
S401  3.54    成绩合格
S402  3.59    成绩合格
S403  3.37    成绩合格
S501  3.59    成绩合格
S502  3.64    成绩优秀
S502  是优秀学生
S503  3.31    成绩合格

触发器实现

禁止在非工作时间更新学生成绩
Create trigger Tsecure_sc on Sc19377056 for Insert, Delete, Update 
as
begin
If ( DateName(weekday, getdate() ) = '星期六' OR
 DateName(weekday, getdate() ) = '星期日' OR
 Convert (Int, DateName(hour, getdate() ) )
 Not Between 9 and 17 )
Begin
RAISERROR ('只许在工作时间操作', 16, 1)
ROLLBACK TRANSACTION
End
End

update Sc19377056 set Grade =70 
where Sno='S002' and Cno = '8002'
Msg 50000, Level 16, State 1, Procedure Tsecure_sc, Line 10 [Batch Start Line 72]
只许在工作时间操作
Msg 3609, Level 16, State 1, Line 73
事务在触发器中结束。批处理已中止。

Completion time: 2021-11-21T10:24:35.4024546+08:00
建立成绩更新记录表
CREATE TABLE Stu_update(   #创建更新之后的保存表
    Sno char(8) not null, 
    Cno char(8) not null, 
    Old_grade tinyint null,
    New_grade tinyint null,
    Time_ud Datetime,
    Sys_user char(6))
Create trigger Td_student2 on Sc19377056 for update  #创建触发器,要求如题目所示
as
Begin
if @@rowcount = 0
return
insert into Stu_update(Sno,Cno,Old_grade,New_grade,Time_ud,Sys_user)
select deleted.Sno, deleted.Cno,deleted.Grade,inserted.Grade,
GETDATE(), SYSTEM_USER
from deleted,inserted
End

select * from Stu_update  #观察更新数据前后新表的变化

update Sc19377056 set Grade =90
where Sno='S002' and Cno = '8002'
update Sc19377056 set Grade =90
where Sno='S003' and Cno = '9001'

select * from Stu_update

更新前

Sno Cno Old_grade New_grade Time_ud Sys_user

更新后

Sno Cno Old_grade New_grade Time_ud Sys_user
S002 8002 93 90 2021-11-21 11:29:12.157 sa
S003 9001 86 90 2021-11-21 11:34:46.150 sa

高级语言的数据库连接与数据表访问

# !usr/python/bin
# -*- coding:utf-8 -*-
import pyodbc #使用pyodbc操作数据库
 
sqlconn = pyodbc.connect(DRIVER='{SQL Server}',  #输入参数进行连接
                         SERVER='127.0.0.1,1433',
                         DATABASE='STUDENT19377056',
                         UID='sa',
                         PWD='root')
 
cursor = sqlconn.cursor()  #创建游标

sql = 'select Sno,round(sum(Ccredit*Grade/25.0)/sum(Ccredit),2) as gpa from Course19377056,Sc19377056\
        where Course19377056.Cno = Sc19377056.Cno and Grade>=60 group by Sno'
cursor.execute(sql)  #执行sql语句
rows = cursor.fetchall()
for row in rows: #获得学生的GPA
    print(row.Sno,row.gpa)
S001     3.6
S002     2.98
S003     3.17
S101     3.15
S201     2.64
S202     3.44
S203     3.34
S301     3.44
S302     3.84
S401     3.54
S402     3.59
S403     3.37
S501     3.59
S502     3.64
S503     3.31

相关文章

  • Sql Server数据库编程存储过程实现和调用

    @[toc] 存储过程的实现和调用 设置关系表 之前的作业中已经设计过关系表,这里继续沿用之前设计的关系表 期末计...

  • SQL Server存储过程总结

    SQL Server存储过程总结 存储过程简介: 存储过程(Stored Procedure)是在大型数据库中,一...

  • php 调用sql server 的存储过程获得返回结果

    php调用 (见下方) execsql方法(见下方) sql server 存储过程(见下方) php 调用 ex...

  • Sql sever 清空数据库所有数据

    1、清空SQL Server数据库中所有表数据编写存储过程脚本: 说明: 存储过程sp_MSForEachTabl...

  • Microsoft SQL Server数据库存储过程与触发器的

      本文介绍基于Microsoft SQL Server软件,实现数据库存储过程与触发器的创建、执行、修改与删除等...

  • mysql基础(三)

    存储过程和函数 存储过程和函数的引入 存储过程和函数是在数据库中定义一些 SQL 语句的集合,然后直接调用这些存储...

  • 4.存储过程(一)

    1. 存储过程和函数概述 存储过程和函数是 事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和...

  • 存储过程

    4.1 存储过程和函数概述 存储过程和函数是 事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过...

  • 存储过程

    在数据库编程过程中经常会用到存储过程 , 相比 SQL 语句 , 存储过程更方便 , 快速 , 安全 ; 先将存储...

  • SQL存储过程和函数(1)

    定义: 存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL...

网友评论

    本文标题:Sql Server数据库编程存储过程实现和调用

    本文链接:https://www.haomeiwen.com/subject/ybxoxrtx.html