• 8.存储过程和触发器


    现在使用的数据库不再是之前的员工管理的数据库了,已经更改为学校上机实验使用的 学生成绩管理数据库,现附上生成学生成绩管理数据库的sql代码。使用该数据库,需要修改下路径。
    USE [master]
    GO
    /****** Object:  Database [student]    Script Date: 2018/5/10 17:13:01 ******/
    CREATE DATABASE [student]
     CONTAINMENT = NONE
     ON  PRIMARY 
    ( NAME = N'student', FILENAME = N'E:Program FilesMicrosoft SQL ServerMSSQL11.SQLEXPRESSMSSQLDATAstudent.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
     LOG ON 
    ( NAME = N'student_log', FILENAME = N'E:Program FilesMicrosoft SQL ServerMSSQL11.SQLEXPRESSMSSQLDATAstudent_log.ldf' , SIZE = 1024KB , MAXSIZE = 5120KB , FILEGROWTH = 10%)
    GO
    ALTER DATABASE [student] SET COMPATIBILITY_LEVEL = 110
    GO
    IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
    begin
    EXEC [student].[dbo].[sp_fulltext_database] @action = 'enable'
    end
    GO
    ALTER DATABASE [student] SET ANSI_NULL_DEFAULT OFF 
    GO
    ALTER DATABASE [student] SET ANSI_NULLS OFF 
    GO
    ALTER DATABASE [student] SET ANSI_PADDING OFF 
    GO
    ALTER DATABASE [student] SET ANSI_WARNINGS OFF 
    GO
    ALTER DATABASE [student] SET ARITHABORT OFF 
    GO
    ALTER DATABASE [student] SET AUTO_CLOSE OFF 
    GO
    ALTER DATABASE [student] SET AUTO_CREATE_STATISTICS ON 
    GO
    ALTER DATABASE [student] SET AUTO_SHRINK OFF 
    GO
    ALTER DATABASE [student] SET AUTO_UPDATE_STATISTICS ON 
    GO
    ALTER DATABASE [student] SET CURSOR_CLOSE_ON_COMMIT OFF 
    GO
    ALTER DATABASE [student] SET CURSOR_DEFAULT  GLOBAL 
    GO
    ALTER DATABASE [student] SET CONCAT_NULL_YIELDS_NULL OFF 
    GO
    ALTER DATABASE [student] SET NUMERIC_ROUNDABORT OFF 
    GO
    ALTER DATABASE [student] SET QUOTED_IDENTIFIER OFF 
    GO
    ALTER DATABASE [student] SET RECURSIVE_TRIGGERS OFF 
    GO
    ALTER DATABASE [student] SET  DISABLE_BROKER 
    GO
    ALTER DATABASE [student] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
    GO
    ALTER DATABASE [student] SET DATE_CORRELATION_OPTIMIZATION OFF 
    GO
    ALTER DATABASE [student] SET TRUSTWORTHY OFF 
    GO
    ALTER DATABASE [student] SET ALLOW_SNAPSHOT_ISOLATION OFF 
    GO
    ALTER DATABASE [student] SET PARAMETERIZATION SIMPLE 
    GO
    ALTER DATABASE [student] SET READ_COMMITTED_SNAPSHOT OFF 
    GO
    ALTER DATABASE [student] SET HONOR_BROKER_PRIORITY OFF 
    GO
    ALTER DATABASE [student] SET RECOVERY SIMPLE 
    GO
    ALTER DATABASE [student] SET  MULTI_USER 
    GO
    ALTER DATABASE [student] SET PAGE_VERIFY CHECKSUM  
    GO
    ALTER DATABASE [student] SET DB_CHAINING OFF 
    GO
    ALTER DATABASE [student] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) 
    GO
    ALTER DATABASE [student] SET TARGET_RECOVERY_TIME = 0 SECONDS 
    GO
    USE [student]
    GO
    /****** Object:  Table [dbo].[course]    Script Date: 2018/5/10 17:13:02 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[course](
    	[cno] [nchar](10) NULL,
    	[cname] [nchar](10) NULL,
    	[credit] [nchar](10) NULL,
    	[pcno] [nchar](10) NULL
    ) ON [PRIMARY]
    
    GO
    /****** Object:  Table [dbo].[sc]    Script Date: 2018/5/10 17:13:02 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[sc](
    	[sno] [nchar](10) NULL,
    	[cno] [nchar](10) NULL,
    	[grade] [int] NULL
    ) ON [PRIMARY]
    
    GO
    /****** Object:  Table [dbo].[student]    Script Date: 2018/5/10 17:13:02 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[student](
    	[sno] [nchar](10) NULL,
    	[sname] [nchar](10) NULL,
    	[ssex] [nchar](10) NULL,
    	[sage] [nchar](10) NULL,
    	[sdept] [nchar](10) NULL
    ) ON [PRIMARY]
    
    GO
    INSERT [dbo].[course] ([cno], [cname], [credit], [pcno]) VALUES (N'1         ', N'数据库       ', N'4         ', N'5         ')
    INSERT [dbo].[course] ([cno], [cname], [credit], [pcno]) VALUES (N'2         ', N'数学        ', N'6         ', NULL)
    INSERT [dbo].[course] ([cno], [cname], [credit], [pcno]) VALUES (N'3         ', N'信息系统      ', N'3         ', N'1         ')
    INSERT [dbo].[course] ([cno], [cname], [credit], [pcno]) VALUES (N'4         ', N'操作系统      ', N'4         ', N'6         ')
    INSERT [dbo].[course] ([cno], [cname], [credit], [pcno]) VALUES (N'5         ', N'数据结构      ', N'4         ', N'7         ')
    INSERT [dbo].[course] ([cno], [cname], [credit], [pcno]) VALUES (N'6         ', N'数据处理      ', N'3         ', NULL)
    INSERT [dbo].[course] ([cno], [cname], [credit], [pcno]) VALUES (N'7         ', N'Pascal    ', N'4         ', N'6         ')
    INSERT [dbo].[sc] ([sno], [cno], [grade]) VALUES (N'95001     ', N'1         ', 92)
    INSERT [dbo].[sc] ([sno], [cno], [grade]) VALUES (N'95001     ', N'2         ', 85)
    INSERT [dbo].[sc] ([sno], [cno], [grade]) VALUES (N'95001     ', N'3         ', 88)
    INSERT [dbo].[sc] ([sno], [cno], [grade]) VALUES (N'95002     ', N'2         ', 90)
    INSERT [dbo].[sc] ([sno], [cno], [grade]) VALUES (N'95002     ', N'3         ', 80)
    INSERT [dbo].[sc] ([sno], [cno], [grade]) VALUES (N'95003     ', N'2         ', 85)
    INSERT [dbo].[sc] ([sno], [cno], [grade]) VALUES (N'95004     ', N'1         ', 58)
    INSERT [dbo].[sc] ([sno], [cno], [grade]) VALUES (N'95004     ', N'2         ', 85)
    INSERT [dbo].[student] ([sno], [sname], [ssex], [sage], [sdept]) VALUES (N'95001     ', N'李勇        ', N'男         ', N'20        ', N'cs        ')
    INSERT [dbo].[student] ([sno], [sname], [ssex], [sage], [sdept]) VALUES (N'95002     ', N'刘晨        ', N'女         ', N'19        ', N'is        ')
    INSERT [dbo].[student] ([sno], [sname], [ssex], [sage], [sdept]) VALUES (N'95003     ', N'王敏        ', N'女         ', N'18        ', N'ma        ')
    INSERT [dbo].[student] ([sno], [sname], [ssex], [sage], [sdept]) VALUES (N'95004     ', N'张立        ', N'男         ', N'19        ', N'is        ')
    INSERT [dbo].[student] ([sno], [sname], [ssex], [sage], [sdept]) VALUES (N'95005     ', N'流云        ', N'女         ', N'18        ', N'cs        ')
    USE [master]
    GO
    ALTER DATABASE [student] SET  READ_WRITE GO

    现在进入存储过程,之前的代码未保存,已经丢失,这里不重新写了,直接附上一个简单的带有输入参数的存储过程。

    --带有输入参数的存储过程
    create procedure ssc
     @cno char(5)
     as
     select student.sno,sname,grade
     from student join sc on student.sno=sc.sno
     where sc.cno=@cno
     
     execute ssc '3'

    接下来是触发器,触发器的功能是:向sc表中插入一行数据,这是检查对应的课程是否正在准备中(查看对应课程表再表course中的状态是否为1),如果在准备中,则不能选修。(需要提前向course表中 插入一列status(char(1)))

    step1:创建触发器

    create trigger scinsert
    on sc
    after insert
    as
    if(select status from course,inserted where course.cno=inserted.cno)='1'
    begin
    print '该课程正在准备中'
    print '该次选课操作失败'
    rollback transaction
    end

    step2:插入一行状态为1的数据(在准备中)

    insert into course (cno,cname,status)
    values('00010','界面设计','1')

    step3:向sc表中插入课程号正在准备的数据

    insert into sc(sno,cno) values ('03001','00010')
    step4:更新course表中的status,重新执行step3
    update course 
    set status='0'
    where cno='00010'


  • 相关阅读:
    20.12.2 leetcode7
    20.12.1 leetcode34
    20.11.30 leetcode767
    20.11.29 leetcode976
    Codeforces632E 选择/小偷与商店 背包DP
    魔法少女 DP NG放的水
    逆反的01串 模拟 NG放的水
    最大数maxnumber bzoj1012 JSOI2008 单调队列
    组合数问题 vijos2006 NOIP2016 D2T1 杨辉三角 排列组合 前缀和
    信息传递 vijos1979 NOIP2015D1T2 强连通分量 tarjan模版题
  • 原文地址:https://www.cnblogs.com/wangxueliang/p/9346477.html
Copyright © 2020-2023  润新知