数据库触发器_trigger

部门表_删除:

USE [test]
GO

/****** Object:  Trigger [dbo].[部门_Delete]    Script Date: 2015/8/31 16:41:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <Author,Ammy,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,显示一次操作触发器修改了多少条记录,>
--因为每个操作类型在一次操作时,对一个触发器只激活一次,但是运行的操作可能更新或删除了10条记录,
--Inserted表和Deleted表里会有10条记录,用系统变量@@ROWCOUNT 可以得知上一次操作所更改的记录数
-- =============================================
CREATE TRIGGER [dbo].[部门_Delete]
ON [test].[dbo].[部门表]
AFTER DELETE
AS
BEGIN
    PRINT '您此次删除了'+CAST(@@ROWCOUNT AS VARCHAR)+'条记录'
END


GO

部门表_插入:

 

USE [test]
GO

/****** Object:  Trigger [dbo].[部门_Insert]    Script Date: 2015/8/31 16:42:29 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <Author,Ammy,Name>
-- Create date: <Create Date,2015/08/19,>
-- Description:    <Description,部门表插入时发出提示:又添加了一种产品,并向日志表插入一条记录>
-- =============================================
CREATE TRIGGER [dbo].[部门_Insert]
ON [dbo].[部门表]
AFTER INSERT
AS
BEGIN
    DECLARE @事件部门名称 NVARCHAR(50)

    SELECT @事件部门名称=部门名称 FROM inserted

    IF(SELECT LEN(电话号码) FROM inserted )<>11
        BEGIN
            PRINT'电话号码位数必须是11位'
            ROLLBACK TRANSACTION
        END
    ELSE
        BEGIN
            print '又添加了一个部门'
            INSERT INTO test.dbo.日志表(事件名,事件人,事件时间)VALUES('添加新部门:'+@事件部门名称,'admin',GETDATE());
            --设置此TRIGGER的嵌套类型为true,如果在 dbo.日志表 上建立触发器,会触发激活dbo.日志表_Insert 触发器
        END

END

GO

部门表_更新:

USE [test]
GO

/****** Object:  Trigger [dbo].[部门表_只能修改部门编号]    Script Date: 2015/8/31 16:43:17 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <Author,Ammy,Name>
-- Create date: <Create Date,2015-08-20,>
-- Description:    <Description,用update(字段名),完成只能修改某字段的触发器>
-- =============================================
CREATE TRIGGER [dbo].[部门表_只能修改部门编号]
ON [dbo].[部门表]
Instead of UPDATE
AS
BEGIN
    SET NOCOUNT ON;
    IF UPDATE(部门编号)
        BEGIN
            DECLARE @部门编号 NVARCHAR(20),
                    @部门名称 NVARCHAR(20),
                    @部门职责 Nvarchar(20)

            SET @部门编号=(SELECT 部门编号 FROM inserted)
            SET @部门名称=(SELECT 部门名称 FROM inserted)
            SET @部门职责 =(SELECT 部门职责 FROM inserted)

            UPDATE 部门表 SET 部门编号=@部门编号
            WHERE 部门名称=@部门名称--AND 部门编号=@部门编号 AND @部门职责=@部门职责
            --这种写法很不好,因为只能操作的语句只能按这种修改才起作用
        END 
    ELSE
        BEGIN 
            PRINT '只能修改部门编号'
            RAISERROR('除了部门编号之外的字段都不允许修改',16,5)
            --PRINT 输出自定义信息,但是只能在查询编辑器窗格中运行SQL语句才能看到这些自定义的信息,
            --而其他的前端应用程序都不会显示这些自定义的信息
        END
END


GO

日志表触发器:

USE [test]
GO

/****** Object:  Trigger [dbo].[日志表_Insert]    Script Date: 2015/8/31 16:44:11 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
CREATE TRIGGER [dbo].[日志表_Insert]
ON [test].[dbo].[日志表]
AFTER INSERT
AS 
BEGIN
    PRINT'数据库又有记录变动了'
END
    

GO

 

posted @ 2015-08-31 16:46  依旧一生有你  阅读(420)  评论(0编辑  收藏  举报