搏击

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

2019-12-04 03:45:45来源:励志吧0次阅读

现在表中已经有数据了,我可以为这些表创建一些有意义的视图。请查看Listing C。 <b>isting C</b>CREATE VIEW vw_ProductPurchasesAS SELECT pr.ProductID, pr.Description, pr.Price AS ProductPrice, pu.PurchasePrice, pu.PurchaseDate FROM Products pr INNER JOIN Purchases pu ON pr.ProductID = pu.ProductIDGO

这是个典型的产品水平的视图。它联合了数据库中的两个表,使得数据简单化了。但是,对于数据提取,使用视图则没有什么优势。在视图上附上INSTEAD-OF触发器后,则允许修改表,但是我不需要直接修改表中的数据。我使用Listing D中的代码在vw_ProductPurchases视图上创建一个INSTEAD-OF触发器。 <b>Listing D</b>CREATE TRIGGER tr_vwProductPurchases ON vw_ProductPurchasesINSTEAD OF INSERTASBEGIN 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 ) SELECTi.ProductID, COALESCE(PurchasePrice, ProductPrice), ISNULL(PurchaseDate, GETDATE()) FROM INSERTED i END ELSE BEGIN PRINT 'Adequate data not provided.' ENDEND

请注意此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认证。

天津医科大学眼科医院怎么样
开发圣爱医院宋金香
昆明哪的医院治疗癫痫病好
开封治疗月经不调医院
温州治疗妇科医院哪家好
分享到: