『壹』 編寫存儲過程,在學生表,課程表,插入記錄,插入該同學選修1號課程的記錄,同時,刪除課程表中除1號課程外
-- create table s_student(s_id int not null,---學號
-- s_sysname char(10) ,---系名
-- s_techname char(10),---專業名
-- s_name char(10),----姓名
-- s_age int,
-- s_sex char(1),
-- s_tel char(13),
-- s_address varchar(100),
-- s_email char(24),
-- primary key(s_id)
-- )
-- go
-- create table s_class
-- ( s_cid char(10) not null,
-- s_sid char(10) not null,
-- s_classname char(10),
-- s_teacher char(15),
-- s_classhour int,
-- primary key (s_sid,s_cid)
-- )
-- go
-- alter table dbo.s_student add s_class char(10) null
-- go
---編寫存儲過程,在學生表和課程表中插入記錄,穗銀插入該同學選修1號課程的記錄,同時,刪除課程裱中除一號課程外的
-- 所有記錄,存儲過程的輸入參數為:學號,姓名,性別,年齡,系名,年級
create procere p_studentandclass
@sid char(10),
@sname char(10),
@ssex char(1),
@sage int,
@ssys char(10),
@sclass char(10)
AS
INSERT INTO dbo.s_student (s_id ,
s_sysname ,
s_techname,
s_name ,
s_age ,
s_sex ,
s_tel,
s_address ,
s_email,s_class)
values(@sid,
@ssys,
'',
@sname,
@sage,
@ssex,
'',
'',
'或搜',
@sclass)
declare @i int,@classname char(10),@teacher char(15),@classhour int
select @i = 1 ,@classname = '',@teacher = '',@classhour = 0
while @i <= 10
BEGIN
IF @i = 1
BEGIN
SELECT @classname ='羽毛球',@teacher ='楊先生',@classhour = 10
END
ELSE IF @i = 2
BEGIN
SELECT @classname ='乒乓球',@teacher ='楊先生',@classhour = 10
END
ELSE IF @i = 3
BEGIN
SELECT @classname ='撞球',@teacher ='劉先生',@classhour = 10
END
ELSE IF @i = 4
BEGIN
SELECT @classname ='籃球',@teacher ='戴先生',@classhour = 10
END
ELSE IF @i = 5
BEGIN
SELECT @classname ='排球',@teacher ='孫先生',@classhour = 10
END
ELSE IF @i = 6
BEGIN
SELECT @classname ='足球',@teacher ='易先生',@classhour = 10
END
ELSE IF @i = 7
BEGIN
SELECT @classname ='花球',@teacher ='黃先生',@classhour = 10
END
ELSE IF @i = 8
BEGIN
SELECT @classname ='跳環',@teacher ='沈先生',@classhour = 10
END
ELSE IF @i = 9
BEGIN
SELECT @classname ='高低桿猜團宴',@teacher ='周先生',@classhour = 10
END
ELSE IF @i =10
BEGIN
SELECT @classname ='跳水',@teacher ='曹先生',@classhour = 10
END
INSERT INTO dbo.s_class ( s_cid,
s_sid ,
s_classname ,
s_teacher ,
s_classhour)
values
(convert(char(10),@i),
@sid,
@classname,@teacher,
@classhour)
select @i = @i +1
END
delete from dbo.s_class where s_sid = @sid and s_cid <> '1'
select *
from dbo.s_student a,
dbo.s_class b
where a.s_id = b.s_sid
go
grant exec on p_studentandclass to public
go
你自己運行下就知道了
『貳』 創建一個觸發器,當修改學生課程成績時,自動將相關信息寫入GradeChange表
1、創建一個帶有輸入參數和輸出的存儲過程p_kh,返回指定教師(作為輸入參數)所授課程的課程號(作為輸出參數)。
『叄』 在存儲過程proc_8_t1進行修改,產生學分為『4』的課程學生選課情況列表,其中包括課程號、課程名、學分。
create procere proc_8_t1
as
begin
select student.sno,student.sname,student.sex,student.deptno,student.age,sc.cno,course.cname,student.birthday from student,sc,course where sc.cno in(select cno from sc where cno in(select cno from course where credit=4))and (student.sno=sc.sno) and( sc.cno=course.cno)
end;
CREATE PROCEDURE proc_8_t3
@sno2 int
AS
DECLARE @sum tinyint
SELECT @sum = sum(credit) from course,sc where course.cno=sc.cno and sc.sno=@sno2 group by sc.sno
IF @sum>=9
PRINT '此配枝學生學分不輪頃足!'培桐敏
ELSE
PRINT '此學生學分已足!'
『肆』 --存儲過程,輸入學號,能輸出學生的所有選課信息
這首好唯句「者培exec in_GetDataByScore 0001」
改為
「 exec in_GetDataByScore '0001' 」
或者改為
「襪派 exec in_GetDataByScore @StuNo='0001' 」
『伍』 t-sql語句:編寫一個存儲過程p-3,修改課程表中課程名稱,帶兩個參數
create proc p1(@原課程碰核名 varchar(20),@新課程名 varchar(20)) as
update 課仔御程表 set 課程名=@新課程名念吵岩 where 課程名=@原課程名
『陸』 sql存儲過程
創建一個存儲過程(insertResult)添加學生成績,要求輸入(學號,課程名,分數)
如果輸入的學號不存在,則提示「學生基本信息表中不存在此學號,請檢查後重新輸入」
如果輸入的課程不存在,則提示「還沒有這門課程,老答請檢查後重新輸入」
如果該學生的專業中沒有輸入的課程,則提示「該學生的專業裡面沒有這門課」
判斷輸入侍弊慧的成績是否是大於0,如果小於0則提示「你太狠了吧,竟然打負分!」
判斷該學生的課程成績是否已經存在,如果存在則提示「此學生的這門課程成績已經錄入了,請不要重復錄入」
最後添加成功則提示「成績添加成功」
CREATE PROCEDURE [dbo].[insertResult]
(
@nStudentNo int, ------------------------學號
@vchCourse varchar(32), ----------------課程
@nAchievement int -------------------------成績
)
AS
SET NOCOUNT ON
--table_student_base_info為學生基本信息表,列student_no為學號,student_specialty為專業課名稱,student_achievement為專業課成績
--table_course為課程表, 列course_name為課程名
DECLARE @nCount int SET @nCount = 0
DECLARE @nSpecialty SET @nSpecialty = 0
DECLARE @nCourse SET @nCourse = 0
DECLARE @nExistAchievement SET @bIsMark = 0
--------------------------------------------------判斷學號是否存在
SELECT
@nCountNo = COUNT(*)
FROM
table_student_base_info
WHERE
table_student_base_info.student_no = @nStudentNo
IF @nCount < 1
BEGIN
PRINT '學生基本信息表中不存在此學號,請檢查後重新輸入'
RETURN
END
------------------------------------------------判斷專業課及成績
SELECT
@nSpecialty = COUNT(*),
@nExistAchievement = student_achievement
FROM
table_student_base_info
WHERE
table_student_base_info.student_specialty = @vchCourse
IF @nSpecialty < 1
BEGIN
PRINT '該學生的專業裡面沒有這門課'
RETURN
END
IF @nExistAchievement >= 0
BEGIN
PRINT '此學生的這門課程成績已經錄入了,請不要重復錄入'
RETURN
END
------------------------------------------------判斷指定課程
SELECT
@nCourse = course_name
FROM
table_course
WHERE
course_name = @vchCourse
IF @nCourse < 1
BEGIN
PRINT '還沒有這門課程,請檢查後重新輸卜粗入'
RETURN
END
----------------------------------------------成績為負
IF @nAchievement < 0
BEGIN
PRINT '你太狠了吧,竟然打負分!'
RETURN
END
----------------------------------------------錄入成績
UPDATE
table_student_base_info
SET
student_achievement = @nAchievement
WHERE
table_student_base_info.student_no = @nStudentNo
PRINT '成績添加成功'
『柒』 創建存儲過程,輸入@學號@課程編號@成績向成績表插入記錄,若存在相同學號與課程號,則修改記錄成績
CREATEPROCEDUREsp_Score
(
手空@snoNVARCHAR(50)
,@cnoNVARCHAR(50)
,@scoreDECIMAL(10,4)
)AS
BEGIN
IFEXISTS(SELECT1FROM[成績表]WHERE[學號欄位]=@snoAND[課程欄位]=@cno)
UPDATE[成績表]
SET[成績欄位]=@score
凳薯則WHERE[學號欄位]=@snoAND[課程欄位]=@cno
棗棚ELSE
INSERTINTO[成績表]([學號欄位],[課程欄位],[成績欄位])
VALUES(@sno,@cno,@score)
END
『捌』 用sql語句 創建一個修改特定學號學生成績的存儲過程
---假定變數xuehao為學號,啟蠢羨kecheng為課程,chengji為成績悄拍,表名稱為mytable。
CREATEPROCEDUREUpdateScore
(
@xuehaovarchar(20),
@kechengvarchar(50),
@chengjivarchar(5)
)
AS
SETNOCOUNTOFF;
UPDATEmytableSETchengji=@chengji
WHERE檔燃(xuehao=@xuehao)AND(kecheng=@kecheng)
GO
『玖』 編寫一個存儲過程實現對表數據的刪除 修改和添加!(sql server資料庫)
1、使用賬戶和密碼,連接到自己的資料庫。
『拾』 創建學生-課程資料庫,編寫存儲過程,完成以下功能:
主要問題是存儲過程主體缺少begin 和 end 語句,使得後面的測試語句也被編譯成了存儲過程的主體,從而造成了遞歸(存儲過程調用自己)。
alter procere 學生信息
@snum varchar(4),
@AvgScore int OUTPUT,
@CourseNum int OUTPUT,
@NotpassNum int OUTPUT
AS
BEGIN
Select @AvgScore = Avg(Score) From SC Where SC.snum = @snum
Select @CourseNum = Count(*) From SC Where SC.snum = @snum
Select @NotpassNum = Count(*) From SC Where SC.snum = @snum and score<60
END
另外,分號是SQL語句的結束符,不明白為什麼有存儲過程名後面會緊跟著一個分號。