存储过程:
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
本文出自 “开始新的工作了” 博客,谢绝转载!