SQLsever 创建DDL触发器,当删除"sdb_XXX"数据库的一个表时,提示"不能删除该表",并回滚删除表的操作。
时间: 2024-02-11 11:45:45 浏览: 23
可以使用如下的代码来创建该触发器:
CREATE TRIGGER trg_prevent_delete
ON DATABASE
FOR DROP_TABLE
AS
IF (ORIGINAL_DB_NAME() = 'sdb_XXX')
BEGIN
ROLLBACK
PRINT '不能删除该表'
END
该触发器会在删除表时触发,判断数据库名称是否为"sdb_XXX",如果是,则回滚删除表的操作,并打印提示信息"不能删除该表"。
相关问题
在sql sever中创建一个DDL触发器,通过它能阻止对DingBao数据库表结构的修改或表的删除。
可以通过如下DDL触发器来阻止对DingBao数据库表结构的修改或表的删除:
CREATE TRIGGER tr_check_ddl
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
BEGIN
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = EVENTDATA().value('(/EVENT_INSTANCE/ObjectID)[1]', 'int') AND type = 'U')
BEGIN
RAISERROR('Tables cannot be modified or dropped in DingBao database!', 16, 1)
ROLLBACK
END
END
该触发器会在每次发生表删除或修改时被触发,并且回滚该操作。如需启用该触发器,请使用如下语句:
ENABLE TRIGGER tr_check_ddl ON DATABASE
请注意,这仅仅是一个简单的演示,如果您有更复杂的需求,需要对代码进行修改。
sql sever创建一个触发器trigger_t1,当删除表student中某个学生的信息时,同时将sc表中与该学生有关的数据全部删除。
可以使用以下 T-SQL 语句在 SQL Server 中创建触发器:
```
CREATE TRIGGER trigger_t1
ON student
AFTER DELETE
AS
BEGIN
DELETE FROM sc WHERE sid IN (SELECT deleted.sid FROM deleted);
END;
```
这个触发器在 student 表删除一行数据后触发,使用 DELETE 语句删除 sc 表中与该学生相关的记录。注意,在 SQL Server 中,使用 deleted 表来引用被删除的行,因此需要使用 SELECT deleted.sid 来获取被删除的学生的 ID。同时,这个触发器是针对整个删除操作的,因此不需要 FOR EACH ROW 子句。