SQLServer测试脚本——创建触发器

75 阅读1分钟
-- 使用 master 数据库
USE master;

-- 创建一个新的数据库(如果尚未存在)
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'TEST')
BEGIN
    CREATE DATABASE TEST;
END;

-- 切换到新的数据库
USE TEST;

-- 创建一个新的模式
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'TestSchema')
BEGIN
    EXEC sp_executesql N'CREATE SCHEMA TestSchema';
END;

-- 创建一个测试表
CREATE TABLE TestSchema.TestTable (
    ID INT PRIMARY KEY,
    Name NVARCHAR(50)
);

-- 创建一个日志表,用于记录触发器操作
CREATE TABLE TestSchema.LogTable (
    Operation NVARCHAR(10),
    Description NVARCHAR(255),
    EventTime DATETIME DEFAULT GETDATE()
);

-- 创建一个存储过程,用于记录插入操作
CREATE PROCEDURE TestSchema.LogInsertTrigger
AS
BEGIN
    INSERT INTO TestSchema.LogTable (Operation, Description)
    VALUES ('INSERT', 'A new row is being inserted.');
END;

-- 创建一个存储过程,用于记录更新操作
CREATE PROCEDURE TestSchema.LogUpdateTrigger
AS
BEGIN
    INSERT INTO TestSchema.LogTable (Operation, Description)
    VALUES ('UPDATE', 'A row is being updated.');
END;

-- 创建一个在插入之前触发的触发器
CREATE TRIGGER TestSchema.BeforeInsertTrigger
ON TestSchema.TestTable
AFTER INSERT
AS
BEGIN
    EXEC TestSchema.LogInsertTrigger;
END;

-- 创建一个在更新之后触发的触发器
CREATE TRIGGER TestSchema.AfterUpdateTrigger
ON TestSchema.TestTable
AFTER UPDATE
AS
BEGIN
    EXEC TestSchema.LogUpdateTrigger;
END;

-- 测试插入操作,触发器将记录插入操作
INSERT INTO TestSchema.TestTable (ID, Name)
VALUES (1, 'Alice');

-- 测试更新操作,触发器将记录更新操作
UPDATE TestSchema.TestTable
SET Name = 'Alice Updated'
WHERE ID = 1;

-- 查看 LogTable 中的记录,确认触发器是否正常工作
SELECT * FROM TestSchema.LogTable;