sql調試觸發器
A. sql server 如何調試觸發器!
一、打開sql查詢分析器;
二、將以下sql語句復制到查詢窗口並運行;
usepubs
createtriggertrigger_updateonauthors
forupdate
as
begin
print(updatelastname=hoho)
end
createprocauthors_procinsert
as
begin
updateauthorssetau_lname=hohowhereau_id=172-32-1176
end
三、在左邊的對象瀏覽器中選擇pubs->存儲過程在authors_procinsert(如未出現請刷新pubs資料庫)上右擊彈出菜單選擇「調試...」。
四、當運行到" update authors set au_lname=hoho where au_id=172-32-1176「時按「f11」即進入觸發器代碼。
B. 在PLSQL中觸發器如何調試
1.
打開PL/SQL
Developer如果
在機器上安裝了PL/SQL
Developer的話,打開PL/SQL
Developer界面輸入
用戶名,密碼和host名字,這個跟在程序中web.config中配置的完全相同,點擊確定
找到
需要調試的存儲過程所在的包(Package
bodies),如PACK_ACTIVITY,點擊右鍵,在彈出菜單中選擇[查看],得到包中的所有存儲過程和他們的代碼.
2.
添加debug信息為了
能夠單步跟蹤存儲過程,需要為其所在的包添加debug信息,右鍵點擊需要調試的包,在彈出菜單中選中[添加調試信息](這個很重要).這樣
就為包體添加了調試信息。
3.
調
試存儲過程現在
所有的准備工作都做好了,可以調試跟蹤存儲過程了。選擇
需要調試的存儲過程,點擊右鍵,在彈出菜單中
選擇[測試],進去測試窗口.測試窗口中有為了測試該存儲過程自動所產生的代碼,當然你也可以自己另外加入和修改代碼,對於我們目前只是為了調試存儲過程,
自動生成的代碼已經足夠了。接著按照如下的步驟進行調試。
(1)添加存儲過程所需要的參數,我們項目中的大多數存儲過程都是需要參數
的,參數可以在測試窗口右下部分輸入。如:GetPanNO_New需要一個輸入參數v_employeeid,我們輸入180,輸出參數是mycursor,是查看結果的,不需要輸入任何值。
(2)開始調試,點擊[調試]菜單->[開始](或者按F9),就進去調試模式了,程序開始停在begin這一行.
(3)以後的調試過程跟我們熟悉的的調試過程就一樣了:運行(Ctrl+R)單步
進入(Ctrl+N)單步
跳過(Ctrl+O)單步
退出(Ctrl+T)或者
點擊debug工具條上的按扭:當按Ctrl+N進去存儲過程的源代碼中後
在這
個窗口中可以查看過程中的變數值和堆棧。
(4)調試運行完了後,可以查看結果如下(點擊mycursor變數旁邊的按鈕).
4.
Tip
令人
比較郁悶的是我們項目中很多的存儲過程都是一個SELECT語句,不管這個SELECT語句多麼復雜(SELECT語句中有嵌套的子SELECT語句),它也只能作為一行代碼,單步跟蹤就沒有什麼意義了。
C. 如何調試觸發器-資料庫專欄,SQL Server
//-------------------------------------調試觸發器//------------------------------------- 作者:四海為圈(原創) //------------------------------------- 1、創建存儲過程以便觸發觸發器 3、選擇單步運行存儲過程 2、在觸發事件的語句如:insert 、update 、delete語句時按f11 //------------------------------------- 本方法在sql server 2000+win2000 server 通過測試 本方法在vs.net 2003 + sql server 2000+win2000 server 通過測試 //-------------------------------------good轉貼請註明來源 維護網路道德是每個網民的義務 //-------------------------------------實例教學:一、打開sql查詢分析器 二、將以下sql語句復制到查詢窗口並運行use pubscreate trigger trigger_update on authorsfor updateasbeginprint(update lastname=hoho)endcreate proc authors_procinsertasbeginupdate authors set au_lname=hoho where au_id=172-32-1176end三、在左邊的對象瀏覽器中選擇pubs->存儲過程在authors_procinsert(如未出現請刷新pubs資料庫)上右擊彈出菜單選擇「調試...」
D. sql server2012如何建立觸發器
首先你當然要有一個資料庫了,這里我使用自己創建的資料庫booksDB。
在資料庫booksDB上創建觸發器,右擊觸發器->新建觸發器,打開之後的界面如下所示
6
資料庫的增刪改查類似
E. sql2008 怎麼調試觸發器
在項目中,單擊右鍵選擇"添加"->"觸發器",代碼如下(validateyear.cs):
using
system;
using
system.data;
using
system.data.sqlclient;
using
microsoft.sqlserver.server;
public
partial
class
triggers
{
//
為目標輸入現有表或視圖並取消對特性行的注釋
[microsoft.sqlserver.server.sqltrigger
(name="validateyear",
target="humanresources",
event="for
insert")]
public
static
void
validateyear()
{
//
用您的代碼替換
sqlconnection
conn
=
new
sqlconnection("context
connection=true");
//定義查詢
string
sql
=
"select
count(*)
"
+
"from
inserted
"
+
"where
year(modifieddate)<>2012";
sqlcommand
comm
=
new
sqlcommand(sql,
conn);
//打開連接
conn.open();
//獲得行數
int
numbadrows
=
(int)comm.executescalar();
if
(numbadrows
>
0)
{
//get
the
sqlpipe
sqlpipe
pipe
=
sqlcontext.pipe;
//role
back
and
raise
an
error
comm.commandtext
=
"raiseerror('修改錯誤',11,1)";
//send
the
error
try
{
}
catch
{
}
system.transactions.transaction.current.rollback();
}
conn.close();
}
}
用於驗證插入的數據是否合法,當插入表humanresources是,如果修改日期的年份不是2012將報錯。
另外要注意的是要使用system.transactions.transaction.current.rollback(),必須添加system.transactions的引用
F. SQl中觸發器怎樣執行的
創建觸發器 是特殊的存儲過程,自動執行,一般不要有返回值。
1、後觸發器 (AFTER,FOR)先執行對應語句,後執行觸發器中的語句。
2、前觸發器 並沒有真正的執行觸發語句(insert,update,delete),而是執行觸發後的語句。
3、行級觸發器 (FOR EACH ROW) 在SQL server 中不存在。
(6)sql調試觸發器擴展閱讀:
創建觸發的語法
CREATE TRIGGER trigger_name --觸發器名稱
ON table_name --觸發的表
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE] --選擇觸發器類型
AS --觸發後要做的語句
T-SQL語句
GO --結束標記
G. sql2008 怎麼調試觸發器
觸發器一般在update,delete,insert 時候觸發、、、你可以根據你寫的觸發器。在該表 執行相應的操作~~查看有沒有執行觸發器里的語句
H. 關於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觸發器。