ssms--1.创建一个delete 触发器,完成的功能为:当删除 customersinfo 表中的客户记
时间: 2024-03-09 20:46:10 浏览: 90
录时,自动在删除前将该客户的信息插入到 customersinfo_deleted 表中,其中 customersinfo_deleted 表与 customersinfo 表结构相同。
下面是对应的 SQL 代码:
```
CREATE TRIGGER tr_customersinfo_delete
ON customersinfo
FOR DELETE
AS
BEGIN
INSERT INTO customersinfo_deleted
SELECT *
FROM deleted
END
```
在上面的代码中,我们创建了一个名为 `tr_customersinfo_delete` 的触发器,它在 `customersinfo` 表上进行了 DELETE 操作时触发。在触发器中,我们将被删除的客户信息插入到了 `customersinfo_deleted` 表中,该表与 `customersinfo` 表的结构相同。
注意,我们使用了 `deleted` 表来获取被删除的数据,该表在触发器中是一个内置表,它包含了所有被删除的行。
相关问题
4.创建一个DDL触发器,当在studentmis数据库中修改表时,会显示提示信息:有一 个表被修改。修改一个表:chengji(xuehao char(20),chengji float),验证触发器 的执行情况。
在SQL Server中,你可以创建一个DDL (Data Definition Language) 触发器来达到这个目的。这种类型的触发器会在数据定义操作(如创建、修改或删除表)发生时自动执行。以下是创建一个DDL触发器的例子,用于在`studentmis`数据库中`chengji`表发生变化时显示提示信息:
```sql
CREATE TRIGGER tr_ChangeTablePrompt
ON DATABASE :: studentmis
AFTER ALTER TABLE
AS
BEGIN
IF (@@TRANCOUNT > 0)
BEGIN
DECLARE @msg NVARCHAR(100) = '有一个表被修改了。'
RAISERROR(@msg, 16, 1);
ROLLBACK TRANSACTION;
END
END;
```
在这个触发器中,`AFTER ALTER TABLE`表示它会在表结构更改后立即运行。`IF @@TRANCOUNT > 0`检查是否在一个事务中,如果在事务中则执行错误报告并回滚事务,显示提示信息。
要验证触发器是否生效,你可以尝试对`chengji`表做一些修改操作,例如添加一个新的字段,然后查看SQL Server Management Studio (SSMS) 的错误日志或者警报视图中是否有预期的消息。
针对图书管理系统 book 数据库: 使用 SSMS 和 TSQL 语句创建 DML 触发器, (1) 对图书管理系统 book 数据库,当插入一条书籍记录时,打印出 一条语句表示已经成功插入一条数据“您又添加了一本书” (2) 对表 books 再创建一个 after insert 触发器,当插入一条书籍记 录时,打印出一条语句表示已经成功插入一条数据“您再次添加 了一本书” (3) 使用 T-SQL 语句创建触发器,当向 borrowinfo 借阅信息表中插入 数据时,更新 BorrowNum 表中的数值,让 BorrowNum 中数据值与 borrowinfo 表中每个读者借阅书籍的数量对应 2. 实验对同一个表,两个 DML 触发器以不同顺序触发效果 3. 使用 SSMS 查看和修改 DML 触发器 4. 使用存储过程(两种语句)查看 DML 触发器 5. 使用 SSMS 和 TSQL 语句禁用、启用、删除 DML 触发器 6. 使 用 TSQL 语 句 创 建 针 对 CREATE_DATABASE , ALTER_DATABASE,DROP_DATABASE 的 DDL 触发器
1. 创建触发器:
```
--1.
CREATE TRIGGER tr_insert_book ON books
AFTER INSERT
AS
BEGIN
PRINT '您又添加了一本书'
END
--2.
CREATE TRIGGER tr_insert_book2 ON books
AFTER INSERT
AS
BEGIN
PRINT '您再次添加了一本书'
END
--3.
CREATE TRIGGER tr_update_borrow_num ON borrowinfo
AFTER INSERT
AS
BEGIN
UPDATE BorrowNum
SET num = (SELECT COUNT(*) FROM borrowinfo WHERE reader_id = inserted.reader_id)
WHERE reader_id = inserted.reader_id
END
```
2. 触发器顺序:
```
CREATE TRIGGER tr_insert_book ON books
AFTER INSERT
AS
BEGIN
PRINT '触发器1'
ROLLBACK
END
CREATE TRIGGER tr_insert_book2 ON books
AFTER INSERT
AS
BEGIN
PRINT '触发器2'
END
INSERT INTO books (book_id, book_name, author, publish_date, price) VALUES (1, 'book1', 'author1', '2021-10-01', 10)
```
结果为:触发器2,触发器1
3. 查看和修改触发器:
在 SSMS 中,可以在数据库的“触发器”文件夹下找到已创建的触发器,右键点击触发器选择“脚本触发器”可以查看和修改触发器。
4. 使用存储过程查看触发器:
```
--1. 查看所有触发器
EXEC sp_helptrigger 'books'
--2. 查看指定触发器
SELECT OBJECT_NAME(parent_object_id) AS table_name, name AS trigger_name, OBJECT_DEFINITION(OBJECT_ID) AS definition
FROM sys.triggers
WHERE parent_class_desc = 'OBJECT_OR_COLUMN' AND OBJECT_NAME(parent_object_id) = 'books' AND name = 'tr_insert_book'
```
5. 启用、禁用和删除触发器:
```
--禁用触发器
DISABLE TRIGGER tr_insert_book ON books
--启用触发器
ENABLE TRIGGER tr_insert_book ON books
--删除触发器
DROP TRIGGER tr_insert_book ON books
```
6. 创建 DDL 触发器:
```
--创建数据库后触发器
CREATE TRIGGER tr_create_db ON ALL SERVER
FOR CREATE_DATABASE
AS
BEGIN
PRINT '数据库已创建'
END
--修改数据库后触发器
CREATE TRIGGER tr_alter_db ON ALL SERVER
FOR ALTER_DATABASE
AS
BEGIN
PRINT '数据库已修改'
END
--删除数据库后触发器
CREATE TRIGGER tr_drop_db ON ALL SERVER
FOR DROP_DATABASE
AS
BEGIN
PRINT '数据库已删除'
END
```
阅读全文