存儲過程

存儲過程:
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
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章