① sql觸發器問題
自身直接觸發的話默認並不遞歸(需要遞歸可以設置「資料庫-選項-雜項-遞歸觸發器已啟用」為true,如果要通過Sql代碼設置這些選項請自行網路下);
但如果通過影響其他表再通過其他觸發修改的話就會遞歸(也就是間接遞歸)。
PS,無論是直接的還是間接的遞歸都不是無限的。
② SQL觸發器的簡單問題
-- 給表A建立insert觸發器
CREATE TRIGGER trig_A_insert ON A FOR INSERT AS
-- 向表B中添加數據,添加內容為剛剛添加到表A的Name列的值
insert into B values (select name from inserted)
go
-- 向A表添加數據,觸發上面的觸發器
insert into A values ('張三', '北京')
③ 關於sql觸發器調試問題
在sql中,觸發器是一種特殊類型的存儲過程,它不同於sql的存儲過程。觸發器主要是通過事件進行觸發而被執行的,而存儲過程可以通過存儲過程名字而被直接調用。當對某一表進行諸如update、
insert、
delete
這些操作時,sql
server
就會自動執行觸發器所定義的sql
語句,從而確保對數據的處理必須符合由這些sql
語句所定義的規則。
觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的一致性。除此之外,觸發器還有其它許多不同的功能:
(1)強化約束(enforce
restriction)
觸發器能夠實現比check
語句更為復雜的約束。
(2)跟蹤變化(auditing
changes)
觸發器可以偵測資料庫內的操作,從而不允許資料庫中未經許可的指定更新和變化。
(3)級聯運行(cascaded
operation)。
觸發器可以偵測資料庫內的操作,並自動地級聯影響整個資料庫的各項內容。例如,某個表上的觸發器中包含有對另外一個表的數據操作(如刪除,更新,插入)而該操作又導致該表上觸發器被觸發。
(4)存儲過程的調用(stored
procere
invocation)。
為了響應資料庫更新觸,發器可以調用一個或多個存儲過程,甚至可以通過外部過程的調用而在dbms(
資料庫管理系統)本身之外進行操作。
由此可見,觸發器可以解決高級形式的業務規則或復雜行為限制以及實現定製記錄等一些方面的問題。例如,觸發器能夠找出某一表在數據修改前後狀態發生的差異,並根據這種差異執行一定的處理。此外一個表的同一類型(insert、
update、
delete)的多個觸發器能夠對同一種數據操作採取多種不同的處理。
總體而言,觸發器性能通常比較低。當運行觸發器時,系統處理的大部分時間花費在參照其它表的這一處理上,因為這些表既不在內存中也不在資料庫設備上,而刪除表和插入表總是位於內存中。可見觸發器所參照的其它表的位置決定了操作要花費的時間長短。
觸發器的種類
sql
server
2000
支持兩種類型的觸發器:after
觸發器和instead
of
觸發器。其中after
觸發器即為sql
server
2000
版本以前所介紹的觸發器。該類型觸發器要求只有執行某一操作(insert
update
delete)
之後,觸發器才被觸發,且只能在表上定義。可以為針對表的同一操作定義多個觸發器。對於after
觸發器,可以定義哪一個觸發器被最先觸發,哪一個被最後觸發,通常使用系統過程sp_settriggerorder
來完成此任務。
instead
of
觸發器表示並不執行其所定義的操作(insert、
update、
delete),而僅是執行觸發器本身。既可在表上定義instead
of
觸發器,也可以在視圖上定義instead
of
觸發器,但對同一操作只能定義一個instead
of觸發器。
④ SQL觸發器能夠解決哪些問題
Microsoft SQL Server™ 2000 提供了兩種主要機制來強制業務規則和數據完整性:約束和觸發器。觸發器是一種特殊類型的存儲過程,它在指定的表中的數據發生變化時自動生效。喚醒調用觸發器以響應 INSERT、UPDATE 或 DELETE 語句。觸發器可以查詢其它表,並可以包含復雜的 Transact-SQL 語句。將觸發器和觸發它的語句作為可在觸發器內回滾的單個事務對待。如果檢測到嚴重錯誤(例如,磁碟空間不足),則整個事務即自動回滾。
觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。 觸發器也可以評估數據修改前後的表狀態,並根據其差異採取對策。 一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許採取多個不同的對策以響應同一個修改語句。
⑤ 關於SQL觸發器問題
instead觸發器是對數據進行增、刪、改操作前進行觸發器中的操作,並放棄用戶實際操作的增、刪、改操作,其實就是替代了觸發,等於是在觸發器內部完成增刪改操作,而不去真實的執行用戶實際的操作,比如insert操作,你可以在觸發器里完成insert操作,但是用戶實際的insert操作是不被執行的
⑥ sql 觸發器問題
改一下中間那句話試試:
create trigger test on perempms
for update
as
begin
declare @staff_no char(10)
declare @rank varchar(50)
--select @staff_no=staff_no,@rank=rank from updated
---把這句話改一下,然後,放到下面的if語句里,這樣可以提高效率
--只有當更新欄位是rank時,才觸發
--另外,下面改的那兩句,要一句就可以了,要麼取改之前的,要麼取改之後的
if update(rank)
begin
----想把改之前的數據值set到另外的表裡,改為:
----select @staff_no=staff_no,@rank=rank from deleted
--想把改之後的數據值set到另外的表裡,改為:
select @staff_no=staff_no,@rank=rank from inserted
update paygrastaff set grade_code=@rank where staff_no=@staff_no
end
end
⑦ 關於Sql觸發器的問題。
將資料庫裡面的欄位A當做觸發器而用字母A來表示這個觸發器,以後可以這個觸發器的名字就是A
⑧ SQL資料庫觸發器問題
我認為 觸發器 能包含 存儲過程 可以吧
而我這個存儲過程里的內不一定是本資料庫中的表啊
比如說我有A B兩個表 A表中是 員工表 欄位: ID 工資
B表裡是 : 工時
A表在資料庫 X 里 B表在資料庫Y里,而我現在要在觸發器中 根據我B表的工時 調用我自定義的函數 算出結果寸入A中
滿意請採納。
⑨ SQL 觸發器的問題
你這個
用sqlserver
定時代理
來
完成吧,同學
管理->SQL
Server代理->作業(按滑鼠右鍵)->
新建作業
點步驟
新建個
寫上
update
的sql
就可以的
如果
用sql
網上
看了下
好像有個
存儲過程,可以實現,太
復雜
了
也沒測試過
用這個吧
同學
⑩ SQL觸發器的問題
create trigger tr_卷煙庫存表 on 卷煙庫存表
for insert
as
begin
if not exists(select * from 卷煙庫存表 where 庫存金額 = 庫存數量 * 庫存單價)
update 卷煙庫存表 set 庫存金額 = 庫存數量 * 庫存單價
end