140XTS00203施耐德電源模塊
140XTS00203施耐德電源模塊
作,如修改數(shù)據(jù)或顯示用戶定義錯誤信息。觸發(fā)器也可以評估數(shù)據(jù)修改前后的表狀態(tài),并根據(jù)其差異采取對策。一個表中的多個同類觸發(fā)器(INSERT、UPDATE 或 DELETE)允許采取多個不同的對策以響應(yīng)同一個修改語句。
觸發(fā)器和約束編輯
約束和觸發(fā)器在特殊情況下各有優(yōu)勢。觸發(fā)器的主要好處在于它們可以包含使用 Transact-SQL 代碼的復(fù)雜處理邏輯。因此,觸發(fā)器可以支持約束的所有功能;但它在所給出的功能上并不總是 的方法。實體完整性總應(yīng)在 級別上通過索引進(jìn)行強(qiáng)制,這些索引或是 PRIMARY KEY 和 UNIQUE 約束的一部分,或是在約束之外獨立創(chuàng)建的。假設(shè)功能可以滿足應(yīng)用程序的功能需求,域完整性應(yīng)通過 CHECK 約束進(jìn)行強(qiáng)制,而引用完整性(RI) 則應(yīng)通過 FOREIGN KEY 約束進(jìn)行強(qiáng)制。在約束所支持的功能無法滿足應(yīng)用程序的功能要求時,觸發(fā)器就極為有用。
例如:除非 REFERENCES 子句定義了級聯(lián)引用操作,否則 FOREIGN KEY 約束只能以與另一列中的值*匹配的值來驗證列值。
CHECK 約束只能根據(jù)邏輯表達(dá)式或同一表中的另一列來驗證列值。如果應(yīng)用程序要求根據(jù)另一個表中的列驗證列值,則必須使用觸發(fā)器。約束只能通過標(biāo)準(zhǔn)的系統(tǒng)錯誤信息傳遞錯誤信息。如果應(yīng)用程序要求使用(或能從中獲益)自定義信息和較為復(fù)雜的錯誤處理,則必須使用觸發(fā)器。
觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實現(xiàn)級聯(lián)更改;不過,通過級聯(lián)引用完整性約束可以更有效地執(zhí)行這些更改。觸發(fā)器可以禁止或回滾違反引用完整性的更改,從而取消所嘗試的數(shù)據(jù)修改。當(dāng)更改外鍵且新值與主鍵不匹配時,此類觸發(fā)器就可能發(fā)生作用。例如,可以在 titleauthor.title_id 上創(chuàng)建一個插入觸發(fā)器,使它在新值與 titles.title_id 中的某個值不匹配時回滾一個插入。不過,通常使用 FOREIGN KEY 來達(dá)到這個目的。如果觸發(fā)器表上存在約束,則在 INSTEAD OF 觸發(fā)器執(zhí)行后但在 AFTER 觸發(fā)器執(zhí)行前檢查這些約束。如果約束破壞,則回滾 INSTEAD OF 觸發(fā)器操作并且不執(zhí)行 AFTER 觸發(fā)器。
觸發(fā)器到底可不可以在視圖上創(chuàng)建 在 SQL Server™ 聯(lián)機(jī)叢書中,是沒有說觸發(fā)器不能在視圖上創(chuàng)建的, 并且在語法解釋中表明:在 CREATE TRIGGER 的 ON 之后可以是視圖。 然而,事實似乎并不是如此,很多專家也說觸發(fā)器不能在視圖上創(chuàng)建。我也專門作了測試,的確如此,不管是普通視圖還是索引視圖,都無法在上面創(chuàng)建觸發(fā)器,真的是這樣嗎?
但是無可厚非的是:當(dāng)在臨時表或系統(tǒng)表上創(chuàng)建觸發(fā)器時會遭到拒絕。
深刻理解 FOR CREATE TRIGGER 語句的 FOR 關(guān)鍵字之后可以跟 INSERT、UPDATE、DELETE 中的一個或多個,也就是說在其它情況下是不會觸發(fā)觸發(fā)器的, 包括 SELECT、TRUNCATE、WRITETEXT、UPDATETEXT。
相關(guān)內(nèi)容 一個有趣的應(yīng)用我們看到許多注冊系統(tǒng)在注冊后都不能更改用戶名,但這多半是由應(yīng)用程序決定的, 如果直接打開數(shù)據(jù)庫表進(jìn)行更改,同樣可以更改其用戶名, 在觸發(fā)器中利用回滾就可以巧妙地實現(xiàn)無法更改用戶名……詳細(xì)內(nèi)容 觸發(fā)器內(nèi)部語句出錯時…… 這種情況下,前面對數(shù)據(jù)更改操作將會無效。舉個例子,在表中插入數(shù)據(jù)時觸發(fā)觸發(fā)器,而觸發(fā)器內(nèi)部此時發(fā)生了運(yùn)行時錯誤,那么將返回一個錯誤值,并且拒絕剛才的數(shù)據(jù)插入。不能在觸發(fā)器中使用的語句 觸發(fā)器中可以使用大多數(shù) T-SQL 語句,但如下一些語句是不能在觸發(fā)器中使用的。
CREATE 語句,如:CREATE DATABASE、CREATE T觸發(fā)器功能強(qiáng)大,輕松可靠地實現(xiàn)許多復(fù)雜的功能,為什么又要慎用呢。觸發(fā)器本身沒有過錯,但由于我們的濫用會造成數(shù)據(jù)庫及應(yīng)用程序的維護(hù)困難。在數(shù)據(jù)庫操作中,我們可以通過關(guān)系、觸發(fā)器、存儲過程、應(yīng)用程序等來實現(xiàn)數(shù)據(jù)操作…… 同時規(guī)則、約束、缺省值也是保證數(shù)據(jù)完整性的重要保障。如果我們對觸發(fā)器過分的依賴,勢必影響數(shù)據(jù)庫的結(jié)構(gòu),同時增加了維護(hù)的復(fù)雜程度。
西門子 6ES7214-2AD23-0XB0 模塊
富士 OPC-VG7-SX EP-4304C-C 驅(qū)動板
AB 889D-F4AC-5 連接線
SIEMENS 6SE6420-2UD24-0BA1 變頻器
ABB RMIO-01C(代碼:68463815) 主板
SCHNEIDER GV2ME32 斷路器
Bristol Babcock 396563-06-6 模塊
歐姆龍 R88D-KN01H-ECT-Z 驅(qū)動器
SIEMENS 090-0XX84-0FF5 面板
西門子 6ES7-322-1BL00-0AA0 模塊
AB SMC-3 150-C85NBD 軟啟動
SIEMENS 6EP1334-3BA10 電源
西門子 090-0XX84-0FF5 板卡
ABB PM861AK01 控制器
SIEMENS 6ES7972-0AB01-0XA0 模塊
西門子 6GK7343-5FA01-0XE0 模塊
西門子 6EP1334-2AA01 電源
西門子 1FL6092-1AC61-0LH1 電機(jī)
西門子 1FL6092-1AC61-0LG1 電機(jī)
圖爾克 BI5-S18-AP6X-H1141-S58-3D 接近開關(guān)
MICROW M10 傳感器
SIEMENS 7KM9300-0AB00-0AA0 模塊
山武 BZ 2RD-T4-JK 微動開關(guān)
西門子 3RT1023-1BB40
西門子 3TX7004-1MB00E02
西門子 3TX7004-1LB00E01
西門子 3TX7002-1FB02
AB 1746-P2 模塊
SIEMENS 6FC5303-1AF12-0AY0 模塊
西門子 6ES7322-1BL00-0AA0 模塊
西門子 6ES7972-0BB11-0XA0 插頭
富士 1MBI300SA-120B-52 模塊
西門子 6SE6440-2UD34-5FB1 變頻器
西門子 6SE6440-2UD15-5AA1 變頻器
歐姆龍 WLCA2-2-Q 開關(guān)
AB 1756-BA2 電池
GE IC693PWR321T 模塊
ELAU SM 100-40-050-P0-44-S1-B1 電機(jī)
ABB S1N 斷路器
ABB TA75 DU 接觸器
FANUA A20B-2101-0354 板卡
FANUA A16B-2203-0661 板卡
FANUA A20B-2100-0760 板卡
Dold AA7562.32/001 繼電器
安川 SRDA-SDA71A01A-E 模塊
歐姆龍 C200HE CPU42 CPU
歐姆龍 C200H OC225 輸出模塊
歐姆龍 C200H ID212 輸入模塊
歐姆龍 C200H PA204 電源模塊
歐姆龍 C200HW-BI081-V1 擴(kuò)展底板
HD CS-8-50-1U 1:50 減速器
SCHNEIDER ATV71HD18N4Z 變頻器
AB 1746-IM16 模塊
西門子 6ES7216-2BD23-0XB8 模塊
西門子 6ES7 392-1BJ00-0AA0 連接器
東方 PH569H-B 馬達(dá)
GE 9T58K2812 變壓器
三菱 QJ71LP21-25 模塊
圖爾克 IM35-11EX-HI/24VDC 安全柵
圖爾克 IM33-11EX-HI/24VDC 安全柵
BECKHOFF BK2000 控制器
東芝 FLR40SW/M 熒光燈
GE IC693MDL645 模塊
海德漢 1387.001-2048 編碼器
SIEMENS 6GK5408-8GS00-2AM2 交換機(jī)
SIEMENS 6GK5400-8AS00-8AP2 交換機(jī)
SIEMENS 6GK5206-2BS00-2AC2 交換機(jī)
SIEMENS 6GK5208-0BA00-2AC2 交換機(jī)
RIFA PEH200YT4220M 電容
研華 LY2K6202B 板卡
EATON N05NBXRD3A 控制器
EBM DV 6224/2 MM440 風(fēng)扇
西門子 6EP1437-3BA00 電源
西門子 6DR5110-0NN00-0AA0 定位器
SIEMENS 360-3AA01-0AA0 模塊
GE IC200MDL650 模塊
GE IC200MDL750 模塊
西門子 6SE6440-2AD31-1CA1 變頻器
西門子 6SE6440-2AD24-0BA1 變頻器
西門子 6SE6440-2AD22-2BA1 變頻器
INFRANOR BLT-072 馬達(dá)
ABB SDCS-CON-2B 主板
ABB SDCS-FEX-2A 控制板