sqlserver查詢外鍵約束語句 在設(shè)計器窗口中怎樣設(shè)置外鍵約束?
在控制臺左側(cè)的小窗格中可以找到command和graphic兩種方法,右擊,創(chuàng)建一個新的外鍵,然后根據(jù)需要進行設(shè)置。(新建圖- gt添加一個表然后用鼠標(biāo)直接拖動字段連接建立外鍵約束。)在命令模式下在s
在控制臺左側(cè)的小窗格中可以找到command和graphic兩種方法,右擊,創(chuàng)建一個新的外鍵,然后根據(jù)需要進行設(shè)置。(新建圖- gt添加一個表然后用鼠標(biāo)直接拖動字段連接建立外鍵約束。)在命令模式下在sql ce表中建立外鍵約束的語法:create table detect table(userid integer,start time datetime not null,End time datetime not null,mass name nvarchar (10),foreign key(UserID)
創(chuàng)建一個觸發(fā)器,這是一個特殊的存儲過程,當(dāng)用戶試圖對指定的表執(zhí)行指定的數(shù)據(jù)修改語句時,會自動執(zhí)行該過程。Microsoft SQL Server允許為任何給定的INSERT、UPDATE或DELETE語句創(chuàng)建多個觸發(fā)器。
語法
創(chuàng)建觸發(fā)器trigger_name
在{表格|視圖}上
[帶加密]
{
{ { FOR | AFTER | INSTEAD OF } { [插入] [,] [更新] }
[帶追加]
[不用于復(fù)制]
如同
[ {如果更新(列)
[ {和|或}更新(列)]
[...n ]
| IF(COLUMNS _ UPDATED(){ bitwise _ operator } UPDATED _ bit mask)
{比較_運算符}列_位掩碼[...n ]
} ]
sql_statement [...n ]
}
}
參數(shù)
觸發(fā)器名稱
觸發(fā)器的名稱。觸發(fā)器名稱必須符合標(biāo)識符規(guī)則,并在。在數(shù)據(jù)庫中必須唯一。您可以選擇是否指定觸發(fā)器所有者名稱。
表格|視圖
是在其上執(zhí)行觸發(fā)器的表或視圖,有時稱為觸發(fā)器表或觸發(fā)器視圖。您可以選擇是否指定表或視圖的所有者名稱。
帶加密
加密syscomments表中包含CREATE TRIGGER語句文本的條目。使用WITH ENCRYPTION可防止觸發(fā)器作為SQL Server復(fù)制的一部分發(fā)布。
在...之后
指定只有在trigger SQL語句中指定的所有操作都已成功執(zhí)行后才觸發(fā)觸發(fā)器。在執(zhí)行此觸發(fā)器之前,還必須成功完成所有引用級聯(lián)操作和約束檢查。
如果只指定了FOR關(guān)鍵字,則AFTER是默認(rèn)設(shè)置。
不能在視圖上定義AFTER觸發(fā)器。
代替
指定執(zhí)行觸發(fā)器而不是觸發(fā)器SQL語句,從而替換觸發(fā)器語句的操作。
在表或視圖中,每個INSERT、UPDATE或DELETE語句最多只能定義一個INSTEAD OF觸發(fā)器。但是,您可以在每個具有INSTEAD OF觸發(fā)器的視圖上定義視圖。
不能在帶有CHECK選項的可更新視圖上定義INSTEAD OF觸發(fā)器。如果向指定了WITH CHECK選項的可更新視圖添加INSTEAD OF觸發(fā)器,SQL Server將生成錯誤。用戶必須使用ALTER VIEW刪除此選項,然后才能定義INSTEAD OF觸發(fā)器。
{[刪除] [,] [插入][,][更新] }
是一個關(guān)鍵字,指定在表或視圖上執(zhí)行時,哪些數(shù)據(jù)修改語句將激活觸發(fā)器。您必須至少指定一個選項。這些關(guān)鍵字在觸發(fā)器定義中允許以任何順序出現(xiàn)。如果指定了多個選項,請用逗號分隔它們。
對于INSTEAD OF觸發(fā)器,在具有ON DELETE級聯(lián)操作引用的表上不允許使用DELETE選項。同樣,對于引用關(guān)系為ON UPDATE cascade operation的表,不允許使用UPDATE選項。
帶附加
指定應(yīng)添加現(xiàn)有類型的其他觸發(fā)器。僅當(dāng)兼容級別為65或更低時,才需要此可選子句。如果兼容級別是70或更高,你不 不必使用WITH APPEND子句添加現(xiàn)有類型的其他觸發(fā)器(這是兼容級別設(shè)置為70或更高的CREATE TRIGGER的默認(rèn)行For)。有關(guān)更多信息,請參見sp_dbcmptlevel。
WITH APPEND不能與INSTEAD OF trigger一起使用,或者如果顯式聲明了AFTER trigger,則不能使用此子句。只有在為了向后兼容而指定FOR時,才能使用WITH APPEND(沒有INSTEAD OF或AFTER)。未來版本將不支持WITH APPEND和FOR(將被解釋為AFTER)。
不用于復(fù)制
指示當(dāng)復(fù)制進程更改觸發(fā)器中涉及的表時,不應(yīng)執(zhí)行觸發(fā)器。
如同
是觸發(fā)器要執(zhí)行的操作。
sql _語句
是觸發(fā)器的條件和操作。觸發(fā)條件指定其他標(biāo)準(zhǔn)來確定DELETE、INSERT或UPDATE語句是否會導(dǎo)致觸發(fā)操作。
當(dāng)嘗試刪除、插入或更新操作時,Transact-SQL語句中指定的觸發(fā)器操作將生效。
觸發(fā)器可以包含任意數(shù)量和種類的Transact-SQL語句。觸發(fā)器被設(shè)計成根據(jù)數(shù)據(jù)修改語句來檢查或改變數(shù)據(jù);它不應(yīng)該向用戶返回數(shù)據(jù)。觸發(fā)器中的Transact-SQL語句通常包含控制流語言。CREATE TRIGGER語句中使用了幾個特殊的表:
刪除和插入的是邏輯(概念)表。這些表在結(jié)構(gòu)上類似于定義觸發(fā)器的表(即嘗試用戶操作的表);這些表用于存儲可能被用戶操作更改的行的舊值或新值。例如,要檢索已刪除表中的所有值,請使用:
選擇*
從已刪除
如果兼容級別等于70,SQL Server將不允許在delete、insert或UPDATE觸發(fā)器中引用INSERTed和DELETEd表中的text、ntext或image列。插入和刪除的表中的Text、ntext和image值。若要在INSERT或UPDATE觸發(fā)器中檢索新值,請將插入的表與原始更新表聯(lián)接起來。當(dāng)兼容級別為65或更低時,在插入或刪除的表中允許空值的text、ntext或image列將返回空值。如果這些列不能為空,則返回零長度字符串。
當(dāng)兼容級別為80或更高時,SQL Server允許對表或視圖使用。OF觸發(fā)器更新text、ntext或image列。
n
是一個占位符,指示觸發(fā)器可以包含多個Transact-SQL語句。對于IF UPDATE (column)語句,可以通過重復(fù)UPDATE (column)子句來包含多個列。
如果更新(列)
測試對指定列的插入或更新操作,該操作不能用于刪除操作??梢灾付ǘ鄠€列。因為表名是在ON子句中指定的,所以在IF UPDATE子句中,不要在列名之前包含表名。若要測試對多個列的插入或更新操作,請在第一個操作后指定一個單獨的UPDATE(column)子句。IF UPDATE將在插入操作中返回TRUE值,因為這些列插入顯式值或隱式(NULL)值。
解釋IF UPDATE (column)子句的功能等同于IF,IF...ELSE或WHILE語句,并且可以使用BEGIN...END語句塊。有關(guān)更多信息,請參見控制流語言。
您可以在觸發(fā)器主體的任何地方使用UPDATE (column)。
圓柱
要測試插入或更新操作的列的名稱。該列可以是SQL Server支持的任何數(shù)據(jù)類型。但是,計算列不能在這種環(huán)境中使用。有關(guān)更多信息,請參見數(shù)據(jù)類型。
IF (COLUMNS_UPDATED())
測試所提到的列是否已入或更新,并且僅在插入或更新觸發(fā)器中使用。COLUMNS_UPDATED返回varbinary位模式,指示表中插入或更新了哪些列。
COLUMNS_UPDATED函數(shù)從左到右返回位,最低有效位在左邊。最左邊的位代表表中的第一列;右邊的下一位表示第二列,依此類推。如果在表上創(chuàng)建的觸發(fā)器包含8個以上的列,COLUMNS_UPDATED將返回多個字節(jié),最左邊的字節(jié)最不重要。在插入操作中,COLUMNS_UPDATED將為所有列返回TRUE值,因為這些列插入了顯式值或隱式(NULL)值。
您可以在觸發(fā)器主體的任何地方使用COLUMNS_UPDATED。
按位運算符
是用于比較運算的位運算符。
updated _位掩碼
表示實際更新或插入的列的整數(shù)位掩碼。例如,表格T1包含C1、C2、C3、C4和C5列。假設(shè)在表t1上有一個更新觸發(fā)器,為了檢查列C2、C3和C4是否都被更新,指定值14;若要檢查是否只更新了列C2,請將值指定為2。
比較_運算符
是一個比較運算符。使用等號()檢查updated_bitmask中指定的所有列是否都已實際更新。使用大于號(gt)檢查updated_bitmask中指定的任何或某些列是否已被更新。
列_位掩碼
是要檢查的列的整數(shù)位掩碼,用于檢查這些列是否已被更新或插入。
給…作注解
觸發(fā)器通常用于實施業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性。SQL Server通過表創(chuàng)建語句(ALTER TABLE和CREATE TABLE)提供聲明性參照完整性(DRI);但是,DRI不提供數(shù)據(jù)庫之間的引用完整性。要實施參照完整性(關(guān)于表的主鍵和外鍵之間關(guān)系的規(guī)則),請使用主鍵和外鍵約束(ALTER TABLE和CREATE TABLE的主鍵和外鍵關(guān)鍵字)。如果觸發(fā)器表中有約束,則在INSTEAD OF觸發(fā)器執(zhí)行之后和觸發(fā)器執(zhí)行之前檢查這些約束。如果違反了約束,INSTEAD OF觸發(fā)器操作將回滾,并且不會執(zhí)行(觸發(fā))AFTER觸發(fā)器。
可以使用sp_settriggerorder來指定表上第一個和最后一個執(zhí)行的AFTER觸發(fā)器。對于表上的每個插入、更新和刪除操作,只能為第一次執(zhí)行和最后一次執(zhí)行指定一個AFTER觸發(fā)器。如果在同一個表上有其他AFTER觸發(fā)器,它們將以隨機順序執(zhí)行。
如果ALTER TRIGGER語句更改了第一個或最后一個觸發(fā)器,則修改后的觸發(fā)器上的第一個或最后一個功能集將被刪除,排序值必須用sp_settriggerorder重置。
只有在成功執(zhí)行觸發(fā)SQL語句(包括所有與更新或刪除的對象相關(guān)聯(lián)的引用級聯(lián)操作和約束檢查)后,才會執(zhí)行AFTER觸發(fā)器。AFTER trigger檢查trigger語句的運行效果,以及由trigger語句引起的更新和刪除引用的所有級聯(lián)操作的效果。
觸發(fā)極限
CREATE TRIGGER必須是批處理中的第一條語句,并且只能應(yīng)用于一個表。
觸發(fā)器只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建,但是觸發(fā)器可以引用當(dāng)前數(shù)據(jù)庫的外部對象。
如果指定觸發(fā)器所有者名稱來限定觸發(fā)器,則以同樣的限定表名。
在同一個CREATE TRIGGER語句中,可以為多個用戶操作定義同一個觸發(fā)器操作,如INSERT和UPDATE。
如果表的外鍵在刪除/更新操作上定義了cascade,則不能在表上定義INSTEAD OF DELETE/UPDATE觸發(fā)器。
可以在觸發(fā)器中指定任何SET語句。所選的SET選項在觸發(fā)器執(zhí)行期間有效,并在觸發(fā)器執(zhí)行后恢復(fù)到以前的設(shè)置。
與存儲過程一樣,當(dāng)觸發(fā)器觸發(fā)時,應(yīng)用程序被調(diào)用。