2015-10-12 47 views
0

我在數據庫上做了一個觸發器,它會停止從我的數據庫中刪除表,但我只想將它應用到微型表上並不是全部,爲此我希望從表中刪除表名在執行放置命令時插入的觸發器表。我在這裏做了一個觸發器,請看下面。請幫助我完成這項任務,我真的需要完成這個任務。從觸發器獲取表名

Create TRIGGER [NO_DROP_Veripda] ON database 
for delete 
declare @table SYSNAME 
select @table= ???? --Here I need help How Can I get table name and insert in this veriable 
print @table 
IF exists (select sys.sysobjects.name from sys.sysobjects where @table in ('test1','caseflds_bk')) 
    PRINT 'Dropping tables are not allowed!!!' 
else 
BEGIN 
DISABLE TRIGGER [NO_DROP_Veripda] ON DATABASE 
    DECLARE @SQL NVARCHAR(MAX) 
    SELECT @SQL = 'DROP TABLE dbo.' + QUOTENAME(@table) + '' 
    EXEC sp_executesql @SQL 
    begin 
     enable TRIGGER [NO_DROP_Veripda] ON DATABASE 
    end 
END 
+0

我假設您必須基於MySQL只允許在特定表上創建觸發器的語法和事實來討論[sql-server]。 – vhu

+0

如果您想阻止某些事情發生,那麼最簡單的方法就是不要爲人們授予執行該活動的權限 - 您爲什麼要授予人們刪除不想讓他們訪問的表的權限? –

+0

多朋友用戶在數據庫上工作或錯誤地發現表被刪除,所以我假設這是一個永久的解決方案。 –

回答

1

您正在嘗試使用DML觸發器。您需要使用DDL trigger以及Event Data function

看到這個Link

+0

感謝您回覆我..我在[事件數據] [1] [1]中提到:https://msdn.microsoft.com/en-us/library/ms187909.aspx並修改我的觸發器 –