资源描述:
《如何使用sql server instead》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、如何使用SQLServerINSTEAD 触发器是类似于存储程序的数据库对象,它响应数据库环境下的某个请求。SQLSever2005包含3个触发器对象:AFTER,数据定义语言(DDL)和INSTEAD-OF。 AFTER触发器是存储程序,它发生于数据操作语句作用之后,例如删除语句等。DDL是SQLServer2005的新触发器,允许响应数据库引擎中对象定义水平事件(例如:DROPTABLE语句)。INSTEAD-OF触发器是对象,在数据库引擎中可以取代数据操作语句而执行。例如:将INSTEAD-OFINSERT触发器附加到表,告诉数据库执行此触发器。 使用INSTEAD-OF触发器
2、的理由 INSTEAD-OF触发器是SQLSever功能强大的对象,允许开发人员转移数据库引擎完成不同的工作,以满足开发要求。其中的一个例子是在数据库的表中添加INSTEAD-OF触发器,当不需要修改表时,可以对表的内容进行回滚。使用此方法时,必须格外小心,因为任何指定的表修改之前,INSTEAD-OF触发器必须处于激活状态。 使用INSTEAD-OF触发器一个更充分理由是视图处理。在视图中添加INSTEAD-OF触发器后,则可创建更新的视图。可更新视图允许完整地提取数据库大纲,因此可以用此方法设计系统,而不需要担心OLTP数据库大纲的问题,并且取代数据修改一组标准视图集。 范例&l
3、t;b>ListingA</b>CREATETABLEProducts( ProductIDSMALLINTIDENTITY(1,1)PRIMARYKEY, DescriptionVARCHAR(75), PriceMONEYNOTNULL)GOCREATETABLEPurchases( PurchaseIDSMALLINTIDENTITY(1,1)PRIMARYKEY, ProductIDSMALLINTREFERENCESProducts(ProductID), PurchasePriceMONEYNOTNULL, PurchaseDate
4、SMALLDATETIMEDEFAULT(GETDATE())) 为了更好地说明可更新视图概念,我们提供一个示例。在本例中,我们设计一个产品表(记录产品),一个购买表(记录购买)。ListingA包含了创建表的脚本,运行此脚本后则得到示例中所要用到的表。运行ListingB脚本向表中添加数据。<b>ListingB</b>INSERTINTOProducts(Description,Price)VALUES('Television',500)INSERTINTOProducts(Description,Price)VALUES('VCR
5、39;,100)INSERTINTOProducts(Description,Price)VALUES('DVD_Player',125)INSERTINTOProducts(Description,Price)VALUES('Alarm_Clock',40)INSERTINTOProducts(Description,Price)VALUES('Camera',325)INSERTINTOProducts(Description,Price)VALUES('Projector',1500)INSERTINTOProducts
6、(Description,Price)VALUES('XBox',400)GOINSERTINTOPurchases(ProductID,PurchasePrice)VALUES(1,500)INSERTINTOPurchases(ProductID,PurchasePrice)VALUES(5,325)INSERTINTOPurchases(ProductID,PurchasePrice)VALUES(1,525)GO 现在表中已经有数据了,我可以为这些表创建一些有意义的视图。请查看ListingC。<b>istingC</b>CREATEVIE
7、Wv Productspr INNERJOINPurchasespuONpr.ProductID=pu.ProductIDGO 这是个典型的产品水平的视图。它联合了数据库中的两个表,使得数据简单化了。但是,对于数据提取,使用视图则没有什么优势。在视图上附上INSTEAD-OF触发器后,则允许修改表,但是我不需要直接修改表中的数据。我使用ListingD中的代码在vINSERTED WHER