❶ 在sql中,為什麼我創建了一個DDL觸發器後不能刪除請高手為我解答。
你好!
你定義的DDL觸發器所在資料庫節點下---可編譯性---資料庫觸發器---右鍵停用/刪除
或者sql語句(DDL觸發器所在資料庫):drop
trigger
t_name
on
database
借用二樓的
liyiguo
如果對你有幫助,望採納。
❷ 在SQL中,為什麼我創建了一個DDL觸發器後不能刪除請高手為我解答。
如果要刪除的觸發器位於樣式或控制項模板中,請確保處於該樣式或模板的編輯模式下。
❸ DML觸發器DDL觸發器有什麼區別
DML觸發器就是普通的 INSERT / UPDATE / DELETE 觸發器。 DDL觸發器就是一些特有的 DDL 語句的觸發器。
主要信息:
觸發器(trigger)是SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。
觸發器經常用於加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。SQL3的觸發器是一個能由系統自動執行對資料庫修改的語句。
觸發器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用於強制服從復雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。
觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。
❹ sql server2008中的觸發器有3種類型,分別為
(1)DML觸發器:是指觸發器在資料庫中發生數據操作語言(DML)事件時將啟用。DML事件即指在表或視圖中修改數據的insert、update、delete語句也。
(2)DDL觸發器:是指當伺服器或資料庫中發生數據定義語言(DDL)事件時將啟用。DDL事件即指在表或索引中的create、alter、drop語句也。
(3)登陸觸發器:是指當用戶登錄SQL SERVER實例建立會話時觸發。
❺ SQL中,觸發器是什麼
觸發器是對表進行插入、更新、刪除的時候會自動執行的特殊存儲過程。
觸發器一般用在check約束更加復雜的約束上面。例如在執行update、insert、delete這些操作的時候,系統會自動調用執行該表上對應的觸發器。
SQL Server 2005中觸發器可以分為兩類:DML觸發器和DDL觸發器,其中DDL觸發器它們會影響多種數據定義語言語句而激發,這些語句有create、alter、drop語句。
DML觸發器分為:
1、 after觸發器(之後觸發)
a、 insert觸發器
b、 update觸發器
c、 delete觸發器
2、 instead of 觸發器 (之前觸發)
其中after觸發器要求只有執行某一操作insert、update、delete之後觸發器才被觸發,且只能定義在表上。而instead of觸發器表示並不執行其定義的操作(insert、update、delete)而僅是執行觸發器本身。既可以在表上定義instead of觸發器,也可以在視圖上定義。
觸發器有兩個特殊的表:插入表(instered表)和刪除表(deleted表)。這兩張是邏輯表也是虛表。有系統在內存中創建者兩張表,不會存儲在資料庫中。而且兩張表的都是只讀的,只能讀取數據而不能修改數據。這兩張表的結果總是與被改觸發器應用的表的結構相同。當觸發器完成工作後,這兩張表就會被刪除。Inserted表的數據是插入或是修改後的數據,而deleted表的數據是更新前的或是刪除的數據。
Update數據的時候就是先刪除表記錄,然後增加一條記錄。這樣在inserted和deleted表就都有update後的數據記錄了。注意的是:觸發器本身就是一個事務,所以在觸發器裡面可以對修改數據進行一些特殊的檢查。如果不滿足可以利用事務回滾,撤銷操作。
❻ sql語句中,創建DDL觸發器的兩個問題,謝謝!
--樓主你好 你上面的寫法是沒有問題的 但沒有任何意義 如果創建刪除表的觸發器 那麼就應該是阻止
--刪除表 你上面那樣寫 照樣能刪 只是會顯示一個no 然後是不能加資料庫的名字的 創建哪個資料庫的
--觸發器 就在哪個資料庫裡面創建就行了
--還有他後面跟的 有對表、視圖、存儲過程、函數 都可以的
……
after CREATE_TABLE,DROP_TABLE,
ALTER_TABLE,CREATE_PROCEDURE,
ALTER_PROCEDURE,DROP_PROCEDURE,CREATE_view,ALTER_view,DROP_view,
CREATE_function,ALTER_function,DROP_function
--有什麼疑問可以隨時找我 希望解決了樓主的問題
❼ 資料庫觸發器有什麼作用
觸發器的作用:
自動計算數據值,如果數據的值達到了一定的要求,則進行特定的處理。
同步實時地復製表中的數據。
實現復雜的非標準的資料庫相關完整性規則。
可在寫入數據表前,強制檢驗或轉換數據。
觸發器發生錯誤時,異動的結果會被撤銷。
部分資料庫管理系統可以針對數據定義語言(DDL)使用觸發器,稱為DDL觸發器。
可依照特定的情況,替換異動的指令 (INSTEAD OF)。
(7)sqlddl觸發器擴展閱讀:
分類
SQL Server 包括三種常規類型的觸發器:DML 觸發器、DDL 觸發器和登錄觸發器。
DML觸發器
當資料庫中表中的數據發生變化時,包括insert,update,delete任意操作,如果我們對該表寫了對應的DML觸發器,那麼該觸發器自動執行。
DML觸發器的主要作用在於強制執行業 務規則,以及擴展Sql Server約束,默認值等。因為我們知道約束只能約束同一個表中的數據,而觸發器中則可以執行任意Sql命令。
DDL觸發器
它是Sql Server2005新增的觸發器,主要用於審核與規范對資料庫中表,觸發器,視圖等結構上的操作。比如在修改表,修改列,新增表,新增列等。
它在資料庫結構發生變化時執行,我們主要用它來記錄資料庫的修改過程,以及限製程序員對資料庫的修改,比如不允許刪除某些指定表等。
登錄觸發器
登錄觸發器將為響應 LOGIN 事件而激發存儲過程。與 SQL Server 實例建立用戶會話時將引發此事件。登錄觸發器將在登錄的身份驗證階段完成之後且用戶會話實際建立之前激發。
因此,來自觸發器內部且通常將到達用戶的所有消息(例如錯誤消息和來自 PRINT 語句的消息)會傳送到 SQL Server 錯誤日誌。如果身份驗證失敗,將不激發登錄觸發器。
參考資料來源:網路-觸發器
❽ DDL觸發器分為
在資料庫中有三種數據語言:
DDL(Data Definition Language):數據定義語言。如Create Drop Alter等
DML(Data Manipulation):數據操縱語言。如Insert ,Update,Delete
DCL(Data Control Language):數據控制語言 .如Grant,Revoke等
在2000中只可以為DML做觸發器,而在2005中,可以為DDL做觸發器,我們叫它DDL觸發器
一:
Microsoft SQL Server 2005 在資料庫引擎 中引入了多項能提高程序員的開發能力和工作效率的改進和新功能。其中DDL觸發器就是其中之一。
除了對修改數據的數據操作語言語句(INSERT、UPDATE 和 DELETE)所激發的觸發器提供支持外,資料庫引擎 還包括一類新的觸發器,由修改資料庫對象的 DDL 語句(如以 CREATE、ALTER 或 DROP 開頭的語句)激發。DDL 觸發器可用於審核或控制對資料庫架構的更改。
像常規觸發器一樣,DDL 觸發器將激發存儲過程以響應事件,這些語句主要是以 CREATE、ALTER 和 DROP 開頭的語句。DDL 觸發器可用於管理任務,例如審核和控制資料庫操作。
僅在運行觸發 DDL 觸發器的 DDL 語句後,DDL 觸發器才會激發。DDL 觸發器無法作為 INSTEAD OF 觸發器使用。
二:
在響應當前資料庫或伺服器中處理的 Transact-SQL 事件時,可以激發 DDL 觸發器。觸發器的作用域取決於事件。例如,每當資料庫中發生 CREATE TABLE 事件時,都會觸發為響應 CREATE TABLE 事件創建的 DDL 觸發器。每當伺服器中發生 CREATE LOGIN 事件時,都會觸發為響應 CREATE LOGIN 事件創建的 DDL 觸發器。
在下面的示例中,每當資料庫中發生 DROP TABLE 事件或 ALTER TABLE 事件,都將觸發 DDL 觸發器 safety:
CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK
;
資料庫范圍內的 DDL 觸發器都作為對象存儲在創建它們的資料庫中。可以在 master 資料庫中創建 DDL 觸發器,這些 DDL 觸發器的行為與在用戶設計的資料庫中創建的 DDL 觸發器一樣。可以從創建 DDL 觸發器的資料庫上下文中的 sys.triggers 目錄視圖中,或通過指定資料庫名稱作為標識符(例如 master.sys.triggers)來獲取有關這些 DDL 觸發器的信息。
伺服器范圍內的 DDL 觸發器作為對象存儲在 master 資料庫中。不同的是,可以從任何資料庫上下文中的 sys.server_triggers 目錄視圖中獲取有關資料庫范圍內的 DDL 觸發器的信息。
使用 EVENTDATA 函數,可以捕獲有關激發 DDL 觸發器的事件的信息。此函數返回 xml 值。
三:
以下示例創建用於存儲所有資料庫級事件的相關信息的表,並在表中填充 DDL 觸發器。通過對 EVENTDATA 生成的 XML 數據使用 XQuery,可以捕獲事件類型和 Transact-SQL 語句。
USE AdventureWorks;
GO
CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000));
GO
CREATE TRIGGER log
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
DECLARE @data XML
SET @data = EVENTDATA()
INSERT ddl_log
(PostTime, DB_User, Event, TSQL)
VALUES
(GETDATE(),
CONVERT(nvarchar(100), CURRENT_USER),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;
GO
--Test the trigger.
CREATE TABLE TestTable (a int)
DROP TABLE TestTable ;
GO
SELECT * FROM ddl_log ;
GO
--Drop the trigger.
DROP TRIGGER log
ON DATABASE
GO
--Drop table ddl_log.
DROP TABLE ddl_log
GO
我是從「上海全鼎軟體學院」畢業的————————
❾ sql2005創建DDL觸發器失敗在關鍵字 'all' 附近有語法錯誤.
lyzh2是資料庫吧,改成這樣。
uselyzh2
go
createtriggerban1
ondatabase
FORDROP_TABLE,ALTER_TABLE
AS
PRINT'對不起,您不能對數據表進行操作'
ROLLBACK;