(我說是是10分鐘入門,事實上對我來說,真的就是老師講的那十分鐘,並沒有過分誇張,然後我就知道了預存程序和觸發器應該怎麼寫了,當然只是入門而已,但我恬恬缺這十分鐘,如果沒有人講,只是自己看書的話,至少要好幾天的時間了....)
一直以來,對SQL SERVER的預存程序和觸發器都基本沒有用到,只是偶爾從網上找幾個簡單的函數PASTE到我的SQL中用。自己寫總是感覺缺點什麼,前幾天單位的培訓講了一天的SQL SERVER,看了老師寫的預存程序,才發現原來預存程序也不是很難。
事實上,也是我一直沒有堅持研究的原因,但是不能否認的是,有人講和自己學,這其中的效率實在是無法相比。尤其是對於我們這種已經編過很多年的程式,但是卻又靜不下心來看書學習的人來說,很多東西其實就是需要有人在前面帶那麼一下,把那層紙捅破了,給大家一個概貌性的東西,餘下的,就只是個時間和熟練性的問題了。
我認為的預存程序的紙就在這裡:
1、變數的聲明和使用
declare @var as varchar(50)
set var='abcd'
2、IF迴圈
if isnull(@prjid,0)=0
begin
print '沒有找到prjid!!!'
return
end
else
begin
--必須在這裡寫一些代碼,否則會報錯。
end
3、遊標的使用
- declare curJD cursor for
- select id,fzbh from _tzk
- open curJD
- fetch next from curJD into @jdID,@paperno
- while @@FETCH_STATUS=0
- BEGIN
- --這裡是一些處理代碼
- fetch next from curJD into @jdID,@paperno
- END
- close curJD
- deallocate curJD
4、觸發器的使用
關鍵在於inserted表和deleted表的使用
- ALTER TRIGGER RoleInsert ON [dbo].[roleName]
- AFTER INSERT
- AS
- declare @RoleID as bigint
- set @RoleID=(select roleid from inserted)
- insert into rolerule (roleid,menuid,pw)
- select @roleid,menuid,0 from menus where menus.menuid not in
- (select menuid from rolerule where roleid=@roleid)
- update rolerule set pw=1 where menuid in (select menuid from menus where always=1)
- and roleid in (select roleid from inserted)
然後有了這幾個例子,其它的就是熟練的一個過程了