SQL Server中的触发器:解锁自动化功能
#sql #database #sqlserver #trigger

简介
触发器在数据库管理领域至关重要,以自动化流程和执行业务规则。无论您在SQL Server开发方面或职业生涯中的位置如何,了解触发器对于有效且可靠的数据库操作至关重要。我将进入SQL Server中触发器的想法,查看其功能,并发现他们如何在此博客文章中改善您的数据库管理经验。

什么是触发器?
对某些事件的自动响应,例如在特定表上发生的数据更改(插入,更新或删除),被称为SQL Server中的触发器。当这些事件发生时,触发器为您提供了一系列指定措施的机制,使您能够维护数据完整性并执行复杂的业务规则。

触发器类型

SQL Server支持触发器的两种主要类型:“触发”和“而不是”触发器。但是我将讨论“在”触发器之后,因为它与其他触发器相比最有用。

触发后
这些触发事件发生并完成后,这些触发器发生。触发器通常用于审核更改,更新相关表或根据修改后的数据执行计算。
让我们来介绍示例。

  • 将SQL Server连接到LocalDB

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5uyexo8gih06lupyexpm.png

  • 商店表由商店ID,创建的日期,商店名称和电话列创建。

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pktwymzqygrh4eyuhg2r.png

  • 在用户插入商店表中的新和唯一行之后,为值插入创建了另一个名为触发表的表。

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9i6gtiuikr8ekecs1190.png

  • 让我们编写触发器,以在存储表中的任何行插入后,将每个唯一行插入新的触发表中。
CREATE TRIGGER dbo.fetch_data
   ON  dbo.store
   AFTER INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    declare @store_id int
    declare @store_name varchar(max)
    declare @phone varchar(max)

    select @store_id=[store_id] from inserted;
    select @store_name = [store_name] from inserted;
    select @phone=[phone] from inserted;

   if (
    @_store_name _in (select store_name from trigger_table)
    and @phone in (select phone from trigger_table))
    BEGIN
        rollback
        RAISERROR ('Same store name with same date and phone already exist', 16, 1);
    END
    ELSE
    BEGIN
        insert into  dbo.trigger_table (store_id,inserted_date,store_name,phone)
        values (@store_id,GETDATE(),@store_name,@phone)
    END

END
GO
  • 将一排插入商店表

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gplfoilq1atofwxy5jbe.png

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0om99lfpbrw4llmy2nrp.png

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uviv1sfeyonrhheniqct.png

  • 现在让我们检查一下触发表

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5lnnmo727haw3p9o602i.png
与当前日期一起插入了同一字段。
哇,它会自动知道任何新插入,并在没有任何手动过程的情况下将完全相同的数据插入完全相同的数据。

  • 让我们尝试将重复数据插入商店表

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gwpmpj4m5c3fevf8yk8u.png
在重复的商店名称和电话插入过程中,触发器执行并显示有关重复输入的错误消息,查询是回滚。结果,重复数据不会插入商店表,也不会在触发表中插入。

触发器的优势
数据完整性:通过确保仅保留在内部的准确和可靠的数据来保护您的数据库。触发者通过验证输入,执行参考完整性检查或执行复杂的业务规则来协助保持数据的质量和正确性。

自动化:触发者通过自动重复操作来消除对手动干预的需求。您可以通过使用它们自动更新相关表,生成派生数据,发送通知或保留审计跟踪来节省时间和精力。

可伸缩性:通过将复杂的逻辑包含在数据库本身中,触发器可以改善数据库系统的可扩展性。这减少了在各种应用程序层中进行反复执行的要求,并鼓励开发更有效和简化的体系结构。

结论
SQL Server的重要组成部分是触发器,它使您可以在数据库中自动化流程并执行业务规则。您可以通过有效利用触发器来提高数据完整性,自动化重复程序,提高数据库管理过程中的一致性。为了充分利用您的触发,遵循最佳实践,正确测试它们并记录它们的工作方式。如果您对触发器有牢固的掌握,则可以解锁自动化的功能,并简化SQL Server工作流程。