初学 sql存储过程和触发器
sql server
存储过程的 流控制语言具体怎么用?
请大家举个列子详细 解释下哈
还有触发器的 print方面的也举个列子(列如:成绩大于100或小于0 则不能保存)……等等……
谢谢 谢谢大家啊!
[解决办法]
这段在我网上,先给你参考:
4. 程序流程控制 打开查询分析器,在查询窗口输入下列程序,理解其中条件语句、循环语句、等待语句的写法。运行程序时,注意查询分析器状态栏上的执行时间提示(程序保存为s6_4.sql)。/*随机产生十个两位数,求出奇数和偶数的个数及各自的和,并延时输出*/DECLARE @a int, @b1 int, @b2 int, @c1 int, @c2 int, @i intSET @i=0SET @b1=0SET @b2=0SET @c1=0SET @c2=0WHILE @i<10 BEGIN SET @a=floor(89*rand())+10 PRINT @a IF @a % 2=0 BEGIN SET @b1=@b1+@a SET @c1=@c1+1 END ELSE BEGIN SET @b2=@b2+@a SET @c2=@c2+1 END SET @i=@i+1 ENDWAITFOR DELAY '000:00:10'SELECT @c1 as 偶数个数, @b1 as 偶数和, @c2 as 奇数个数, @b2 as 奇数和GO
[解决办法]
晴天大大出书了?
什么书?
改明儿去买一本!
[解决办法]
表示关注您的出书!
[解决办法]
菜鸟的我在学习中
[解决办法]
存储过程(feixianxxx)
http://topic.csdn.net/u/20091127/21/10a70c07-8683-4f9e-be7e-2415fa8f6956.html?seed=296887941&r=61490884#r_61490884
有关存储过程的讨论
http://topic.csdn.net/u/20080511/21/ffe1bd32-fff2-4067-bcf9-cadea806ac8f.html?1953379669
常用存储过程语法收藏
http://topic.csdn.net/u/20090216/10/fca7534f-e881-4e37-b9b7-8fe141ee186b.html?15784
[解决办法]
触发器综述
http://topic.csdn.net/u/20081005/11/57061a18-c234-40ee-ba4b-1f4c3bc7f09a.html
T-MAC学习笔记19之--浅谈触发器
http://topic.csdn.net/u/20091203/20/ef22e48d-4560-437e-9500-6efa4044284d.html?41106
--触发器的操作1create table 化验室纱组(本厂编号 int,客户 int,色号 int,纱支 int)create table 化验室布组(本厂编号 int,客户 int,色号 int,布类 int)gocreate trigger my_trig on 化验室纱组 for insert ,update ,deleteasif not exists(select 1 from inserted) delete 化验室布组 from deleted t where 化验室布组.本厂编号 = t.本厂编号 else if not exists(select 1 from deleted) insert into 化验室布组(本厂编号 ,客户 ,色号) select 本厂编号 ,客户 ,色号 from insertedelse update 化验室布组 set 客户 = t.客户 , 色号 = t.色号 from inserted t where 化验室布组.本厂编号 = t.本厂编号go--1、insert 对化验室纱组插入数据,然后查看化验室布组表的数据insert into 化验室纱组 values(1 , 2 , 3 , 4)insert into 化验室纱组 values(5 , 6 , 7 , 8)goselect * from 化验室布组/*本厂编号 客户 色号 布类 ----------- ----------- ----------- ----------- 1 2 3 NULL5 6 7 NULL(所影响的行数为 2 行)*/--2、update , 更改化验室纱组表中本厂编号=1的色号=6update 化验室纱组 set 色号 = 6 where 本厂编号 = 1goselect * from 化验室布组/*本厂编号 客户 色号 布类 ----------- ----------- ----------- ----------- 1 2 6 NULL5 6 7 NULL(所影响的行数为 2 行)*/--3、delete 化验室纱组表中本厂编号=1的那条数据delete from 化验室纱组 where 本厂编号 = 1goselect * from 化验室布组/*本厂编号 客户 色号 布类 ----------- ----------- ----------- ----------- 5 6 7 NULL(所影响的行数为 1 行)*/drop table 化验室纱组 , 化验室布组
[解决办法]
drop table classname declare @TeacherID int declare @a char(50) declare @b char(50) declare @c char(50) declare @d char(50) declare @e char(50) set @TeacherID=1 select @a=DRClass1, @b=DRClass2, @c=DRClass3, @d=DRClass4, @e=DRClass5 from Teacher Where TeacherID = @TeacherID create table classname(classname char(50)) insert into classname (classname) values (@a) if (@b is not null) begin insert into classname (classname) values (@b) if (@c is not null) begin insert into classname (classname) values (@c) if (@d is not null) begin insert into classname (classname) values (@d) if (@e is not null) begin insert into classname (classname) values (@e) end end end end select * from classname 以上这些SQL语句能不能转成一个存储过程?我自己试了下 ALTER PROCEDURE Pr_GetClass @TeacherID int, @a char(50), @b char(50), @c char(50), @d char(50), @e char(50) as select @a=DRClass1, @b=DRClass2, @c=DRClass3, @d=DRClass4, @e=DRClass5 from Teacher Where TeacherID = @TeacherID DROP TABLE classname create table classname(classname char(50)) insert into classname (classname) values (@a) if (@b is not null) begin insert into classname (classname) values (@b) if (@c is not null) begin insert into classname (classname) values (@c) if (@d is not null) begin insert into classname (classname) values (@d) if (@e is not null) begin insert into classname (classname) values (@e) end end end end select * from classname 但是这样的话,这个存储过程就有6个变量,实际上应该只提供一个变量就可以了 主要的问题就是自己没搞清楚 @a,@b,@C,@d 等是临时变量,是放在as后面重新做一些申明的,而不是放在开头整个存储过程的变量定义。
[解决办法]
常用的系统存储过程:EXEC sp_databases --列出服务器上所有数据库EXEC sp_helpdb --报告有关指定数据库或所有数据库的信息EXEC sp_renamedb '原数据库名','新数据库名' --更改数据库名(单拥护访问)EXEC sp_tables --当前数据库可查看的列表EXEC sp_columns 表名 --返回某个表列的信息EXEC sp_help 表名 --查看某个表的所有信息EXEC sp_helpconstraint 表名 --查看某个表的约束EXEC sp_helpindex 表名 --查看某个表的索引EXEC sp_stored_procedures --列出当前环境中所有存储过程自定义存储过程:语法:CREATE PROCEDURE 存储过程名@参数1 数据类型 = 默认值 OUTPUT@参数2 数据类型 = 默认值 OUTPUT……AS SQL语句例子(无参):--检测是否存在IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME = 'proc_stu')DROP PROCEDURE proc_stu--创建存储过程CREATE PROCEDURE proc_stuASprint '打印出stuMarks表中的信息'SELECT * FROM stuMarksGO--调用EXEC proc_stu例子(有参): 例1接受参数(不写OUTPUT)--检测是否存在IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME = 'proc_stu')DROP PROCEDURE proc_stu--创建存储过程CREATE PROCEDURE proc_stu@anum int=60,@bnum int=100ASprint '打印出两个参数'print @anumprint @bnumGO--调用存储过程EXEC proc_stu EXEC proc_stu 50EXEC proc_stu default,40EXEC proc_stu 50,40EXEC proc_stu @anum=50,@bnum=40例2输出参数,带OUTPUT--检测是否存在IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME = 'proc_stu')DROP PROCEDURE proc_stu--创建存储过程CREATE PROCEDURE proc_stu@cnum int OUTPUT @anum int=60,@bnum int=100ASset @cnum=10print '打印出两个参数'print @anumprint @bnumGO--调用存储过程DECLARE @SUN int --定义变量用语存储调用存储过程返回的结果EXEC proc_stu @SUN CUTPUT总结: 1.什么是存储过程:(Procedure),它是SQL语句和控制流语句的预编译集合。它可以接受参数、输出参数、返回单个或多个结果集以及返回值(加如RETURN) 2.使用存储过程的优点:允许模块化程序设计;允许更快的执行;减少网络流量; 3.分类:①系统存储过程类似C语言中的系统函数;②用户定义的存储过程类似C语言中的自定义函数