存储过程

存储过程:
declare @a int,@b int,@i int
set @a=5
set @b=10
set @i=1
while @i<
=@a*@b
begin
   if  @i%@a=0 and @i%@b=0
   begin
       print @i
       break
   end
   set @i=@i+1
end

select stuff('abcde',3,2,'xyz')
abxyze
select * from yg3
select 籍贯,stuff(籍贯,1,0,'中国')  from yg3
update yg3 set 姓名=replace(姓名,'李','王')
where 姓名 like '李%'
select upper(' I Love You!')
select '1+2='+cast(3 as char(1))

select '1+2='+str(3)

select abs(-100)
select pi()

select power(2,10)
select rand()
select round(123.456,-1)

select dateadd(day,-100,getdate())
select datediff(year,'2008-08-08',getdate())
select  dateadd(day,100,'2010-03-11')
用户自定义函数
create function 函数名(参数)
returns 返回值类型
as
begin
   SQL 语句
   return 返回表达式
end
实例:编写函数,求指定半径圆面积
alter function fun1(@r float)
returns varchar(200)
as
begin
     declare @s float,@l float
     set @s=pi()*power(@r,2)
     set @l=pi()*2*@r
     return cast(@s as varchar(10))+space(5)+cast(@l as varchar(10))
end
调用函数:  select dbo.函数名(参数)
select dbo.fun1(3)
实例: 求指定半径的圆面积及周长
标量函数: 只能有一个返回值
 
create function fun2()
returns table
as
   return  select 姓名,性别,年龄,籍贯 from yg3
select * from dbo.fun2()
游标: 对结果集中的记录逐条处理
游标的操作过程:
1.声明游标
2.打开游标
3.操作游标
4.关闭游标
5.释放游标
声明游标: 把指定的select执行结果存放到内存中.
语法:
declare 游标名 cursor for select 语句 for read only |update of
实例: 创建游标
declare mycursor cursor for select * from yuangong
打开游标:
语法: open 游标名
如: open mycursor
操行
当第一次打开游标时,指针指向第一条记录的上面
语法:
fetch next |first|last|prior| absolute n  from 游标名
实例:
fetch next from mycursor
4. 关闭游标
语法: close  游标名
如:  close mycursor
5.释放游标
语法:  deallocate 游标名
如: deallocate mycursor

 
实例:逐条显示yuangong表的记录
declare y cursor for select * from yuangong
open y
fetch next from y
while @@fetch_status=0
begin
    fetch next from y
end
close y
deallocate y
fetch 状态  @@fetch_status
0  成功取出记录
-1 到达记录尾
-2 指定的记录不存在
declare yg cursor scroll for select * from yuangong
open yg
fetch last from yg
while @@fetch_status=0
begin
    fetch prior from yg
end
close yg
deallocate yg
触发器: 特殊的存储过程
基本类型: insert   delete  update
事务的操作:
成功: 提交  commit  默认
失败: 回滚  rollback
insert  触发器: 监控对某个表有无insert操作,如果有,则触发此类触发器
select * from nan
实例:禁止向nan表中存放新记录
insert into nan values ('腾飞','男',21)
创建触发器:
语法:
create trigger  触发器名
on 表名  for insert
as
begin
  SQL 语句
end
create trigger tri01
on nan for insert
as
begin
     if (select count(*) from inserted)>0
     begin
            ...
    
       print
     end
end
临时表:
inserted:存放准备插入的新记录
insert into nan values ('张玉','男',22)
select * from nan
删除触发器:  drop trigger 触发器
如:         drop  trigger tri01
禁用触发器: alter table nan disable trigger tri01
开启触发器: alter table nan enable  trigger tri01
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章