WEB开发网
开发学院数据库MSSQL Server 如何使用SQL Server INSTEAD-OF触发器 阅读

如何使用SQL Server INSTEAD-OF触发器

 2007-05-19 09:43:04 来源:WEB开发网   
核心提示: 这是个典型的产品水平的视图,它联合了数据库中的两个表,如何使用SQL Server INSTEAD-OF触发器(3),使得数据简单化了,但是, KY的一家银行工作,有7年的IT工作经验,对于数据提取,使用视图则没有什么优势

这是个典型的产品水平的视图。它联合了数据库中的两个表,使得数据简单化了。但是,对于数据提取,使用视图则没有什么优势。在视图上附上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认证。

上一页  1 2 3 

Tags:如何 使用 SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接