科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道使用SQL Server INSTEAD-OF触发器(2)

使用SQL Server INSTEAD-OF触发器(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

触发器是类似于存储程序的数据库对象,它响应数据库环境下的某个请求。SQL Sever 2005包含3个触发器对象:AFTER,数据定义语言 (DDL)和INSTEAD-OF。

作者:builder.com 来源:builder.com 2007年9月11日

关键字: 触发器 SQL Server SQL Server 各版本 数据库

  • 评论
  • 分享微博
  • 分享邮件
 

现在表中已经有数据了,我可以为这些表创建一些有意义的视图。请查看Listing C。

<b>isting C</b>
CREATE VIEW vw_ProductPurchases
AS
      SELECT
            pr.ProductID, 
            pr.Description, 
            pr.Price AS ProductPrice, 
            pu.PurchasePrice, 
            pu.PurchaseDate   
      FROM
            Products pr
            INNER JOIN Purchases pu ON pr.ProductID = pu.ProductID
GO

  这是个典型的产品水平的视图。它联合了数据库中的两个表,使得数据简单化了。但是,对于数据提取,使用视图则没有什么优势。在视图上附上INSTEAD-OF触发器后,则允许修改表,但是我不需要直接修改表中的数据。我使用Listing D中的代码在vw_ProductPurchases视图上创建一个INSTEAD-OF触发器。

<b>Listing D</b>
CREATE TRIGGER tr_vwProductPurchases ON vw_ProductPurchases
INSTEAD OF INSERT
AS
BEGIN
      IF EXISTS
      (
            SELECT TOP 1 *
            FROM INSERTED
            WHERE 
                  ProductID IS NOT NULL AND
                  ISNULL(COALESCE(PurchasePrice, ProductPrice),0)>0
      )
      BEGIN
            INSERT INTO Purchases
            (
                  ProductID, PurchasePrice, PurchaseDate
            )
            SELECT
i.ProductID, COALESCE(PurchasePrice, ProductPrice), ISNULL(PurchaseDate, GETDATE())
            FROM INSERTED i   
      END
      ELSE
      BEGIN
            PRINT 'Adequate data not provided.'
      END
END

请注意此INSTEAD OF触发器的声明。SQL Server创建的默认的触发器为AFTER触发器,因此,必须在触发器定义中指定INSTEAD OF子句。

触发器的第一条语句是“check”语句。本例中我使用此语句检测INSERTED表以确保显示ProductID字段,并且保证提供显示其他PurchasePrice 或 ProductPrice字段。

如果必要的数据通过INSERT语句都插入到视图中,则触发器将插入指定的值到数据表。下面即是视图的INSERT语句。 INSERT INTO vw_ProductPurchases(ProductID, PurchasePrice) VALUES(1, 700)

INSERT语句提供了有效的ProductID和PurchasePrice,这意味着新记录插入到Purchases表。

结论

INSTEAD-OF触发器具有强大的功能和灵活性。如果系统不大,使用视图系统提取数据大纲能够极大保护数据库程序。

上面的例子很简单,系统中所用到的复杂的触发器需要考虑安全性问题、时间开销和其他限制。

Tim Chapman是一个 SQL Server数据库管理员,他在Louisville, KY的一家银行工作,有7年的IT工作经验,通过了微软SQL Server 2000 和SQL Server 2005认证。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章