Raiserror('该课程的选课人数超过,已经满额!',16,1) Else
Insert SC Select * From Inserted Go
--测试上面的触发器;
select Cno,count(sno) from SC group by Cno go
insert into SC Values('2006010103','J004',null) insert into SC Values('2006010103','J002',NUll) delete from SC where Sno='2006010103' and Cno='J004' go
drop Trigger Check_Count2
--3、在SC表上,建立一个Update后触发器Check_CNO1,当学生修改课程编号时,给出提示信息,并不能修改该列。
Create Trigger Check_CNO1 On SC After Update AS
If Update(CNO) Begin
Raiserror('课程号不能修改,请删除选课后,重新选课!',16,1) RollBack Transaction End Go
--测试上面的触发器;
select * from SC order by Cno
update SC set Cno='J001' where Sno='2006010105' and Cno='J004' go
drop Trigger Check_CNO1
6、存储过程的创建,执行,修改,删除(如:有输入参数,返回值的存储过程) 1、创建存储过程Price_order查询产品的名称,价格,并按照价格进行排序,并执行。
create proc Price_order as
select pName , price form products
order by price asc/desc go
2、创建存储过程Most_expensiveProduct查询最高价格的产品,并执行。 create proc Most_expensiveProduct as
select top 1 with ties pName , price form products
order by price desc go
3、创建存储过程TotalPrice,计算所有产品总价格,并执行。 create procedure TotalPrice as
select sum(price) as 总价格 from products go
创建:
1 CREATE PROCEDURE Get_Data 2 (
3 @Dealer_ID VARCHAR(50) 4 ) 5 AS
6 SELECT * FROM myData WHERE Dealer_ID = @Dealer_ID 修改:
1 ALTER PROCEDURE [dbo].[Get_Data] 2 (
3 @Dealer_ID VARCHAR(50) 4 ) 5 AS
6 SELECT * FROM myData WHERE Dealer_ID = @Dealer_ID 删除:drop procedure sp_name 7、函数的创建,修改,删除(如:标量函数) 创建:
CREATE FUNCTION [dbo].[函数名](参数) RETURNS NVARCHAR(15) AS BEGIN
修改:
alter function 名称
([{@参数名称 参数类型[=默认值]}[,n]]) returns @局部变量 table [with encryption] [as] begin 函数体
return 函数返回值 end
删除:drop function 函数名
一、创建标量用户定义函数
1、在学生信息管理系统中,学生信息表包含列“学号”、列“姓名”;课程信息表包含列“课程代号”、“课程名称”;学生成绩表包含列“学号”、列“课程代号”、列“成绩”,已用约束保证成绩的范围为0~100分。
编写标量函数fn_StudentScore,要求:输入一个学号和一个课程号,返回这个学生这门课的成绩,如果此学生没有选这门课,返回-1。
CREATE FUNCTION fn_StudentScore (@stu_id char(8) ,@course_id char(3)) returns int as begin
declare @a int
set @a=(select score from score
where stu_id=@stu_id and course_id=@course_id)
if @a is null begin
set @a=-1
end return @a end
2、测试函数fn_StudentScore(选两个例子,一个显示成绩,一个显示-1)
declare @score int
exec @score = fn_StudentScore @stu_id='0601009' ,@course_id='009' select @score as 成绩
declare @score int
exec @score = fn_StudentScore @stu_id='0601002' ,@course_id='009' select @score as成绩
3、在学生信息管理系统中,学生信息表包含列“学号”、列“姓名”;课程信
息表包含列“课程代号”、“课程名称”;学生成绩表包含列“学号”、列“课程代号”、列“成绩”,已用约束保证成绩的范围为0~100分。
编写用户定义函数fn_EvaluateOneStudent,要求:每次输入一个学号,计算该学生的所有课程的平均分,如果是85~100分,返回“优”;如果是75~84分,返回“良”;如果是65~74分,返回“中”;如果是0~64分,返回“差”。
CREATE FUNCTION fn_EvaluateOneStudent (@学号 char(8))
RETURNS varchar(10) AS
BEGIN
DECLARE @平均分 integer, @等级 varchar(10)
SELECT @平均分=AVG(score)FROM score WHERE stu_id=@学号 IF @平均分 BETWEEN 85 AND 100 SET @等级='优' ELSE
IF @平均分 BETWEEN 75 AND 84 SET @等级='良'
ELSE IF @平均分 BETWEEN 65 AND 74 SET @等级='中'
ELSE IF @平均分 BETWEEN 0 AND 64 SET @等级='差' RETURN @等级
END
4、测试函数fn_EvaluateOneStudent
例如:判断学号为0601002、0601006、0601009的同学的等级。
declare @等级 varchar(10),@学号 char(8) set @学号= '0601002'
exec @等级= fn_EvaluateOneStudent @学号=@学号 select @学号 as 学号,@等级 as 等级
二、创建多语句表值函数
1、在学生信息管理系统中,学生信息表包含列“学号”、列“姓名”;课程信息表包含列“课程代号”、“课程名称”;学生成绩表包含列“学号”、列“课程代号”、列“成绩”,已用约束保证成绩的范围为0~100分。
编写多语句表值函数fn_SexStudent,要求:当性别是“男”,返回男生表,性别是“女”,返回女生表,否则显示所有学生信息。 CREATE FUNCTION fn_SexStudent (@性别 varchar(8))
RETURNS @sexstudent table
( stu_id char(8) primary key,
stu_name char(10), stu_sex char(2),
stu_birthday smalldatetime
)
AS begin
if @性别='男'
insert @sexstudent select * from student where stu_sex='男'
else if @性别='女'
insert @sexstudent select * from student where stu_sex='女'
else
insert @sexstudent select * from student
return end
2、测试函数fn_SexStudent
select * from dbo.fn_SexStudent('女') select * from dbo.fn_SexStudent('男') select * from dbo.fn_SexStudent('全部')
三、创建内嵌表值函数
1、在学生信息管理系统中,学生信息表包含列“学号”、列“姓名”;课程信息表包含列“课程代号”、“课程名称”;学生成绩表包含列“学号”、列“课程代号”、列“成绩”,已用约束保证成绩的范围为0~100分。
编写内嵌表值函数fn_PassStudent,要求:每次输入一个课程号,返回及格(大于等于60分)的学生学号,姓名,本课程的名称和分数。 CREATE FUNCTION fn_PassStudent (@课程号 varchar(8))
RETURNS TABLE AS
RETURN (
SELECT a. stu_id,stu_name ,course_name, score FROM student AS a
INNER JOIN score AS b
ON a. stu_id =b. stu_id
INNER JOIN course AS c
ON b. course_id =c. course_id
WHERE b. course_id= @课程号 and score>=60 )
2、测试函数fn_PassStudent
select * from fn_PassStudent('005')
控制流:http://www.cnblogs.com/kissdodog/archive/2013/03/10/2953232.html 1、