除了存储过程和用户定义函数,SQL Server 2005中.NET新整合的能力还提供了对创建触发器的支持。要使用Visual Studio 2005创建触发器,你要从前面的例子中了解到怎样创建项目。要使用Visual Studio 2005创建触发器,选择“新建|项目”选项,指定项目名称,点击“确定”创建项目。 在这个项目中,我使用“ti_ShowInserted”作为我的触发器名称。
这个触发器实现的功能是查询插入到表中的一行,并把数据显示出来。给项目指定名称之后点击“确定”,会出现“新建数据库引用”对话框,我使用与前面的例子中相同的设置。接下来,我使用“项目|添加触发器”菜单项为CLR……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
除了存储过程和用户定义函数,SQL Server 2005中.NET新整合的能力还提供了对创建触发器的支持。要使用Visual Studio 2005创建触发器,你要从前面的例子中了解到怎样创建项目。要使用Visual Studio 2005创建触发器,选择“新建|项目”选项,指定项目名称,点击“确定”创建项目。
在这个项目中,我使用“ti_ShowInserted”作为我的触发器名称。这个触发器实现的功能是查询插入到表中的一行,并把数据显示出来。给项目指定名称之后点击“确定”,会出现“新建数据库引用”对话框,我使用与前面的例子中相同的设置。接下来,我使用“项目|添加触发器”菜单项为CLR触发器创建启动项目。如图3-10所示:
图3-10:添加CLR 触发器
正如你在前面的CLR数据库对象例子中看到的那样,你可以从模板列表中选择“触发器”选项,然后在名称文本框中提供触发器的名称。Visual Studio 2005会生成启动项目文件,你可以给其中添加自己的代码。启动项目包括需要的导入指令,并且会生成一个类,本例中类名为“Triggers”,名为“ti_ShowInserted”的方法前面有需要的属性设置。下面的代码列表展示了名为“ti_ShowInserted”的CLR 触发器的完整代码:
本例中CLR触发器显示在数据库“Adventureworks”中表“Person.ContactTypes”上执行的一步插入操作插入的数据内容。代码中要注意的第一点是“ti_ShowInserted”方法的“属性”(在尖括号<>中括起来的代码)。该属性用来命名触发器,并标识触发器将应用到的表和引起触发器触发的事件。
使用Visual Studio 2005触发器模板初始化生成这一属性时,它前面会自动生成注释符号(就是使该行成为注释)。这是因为触发器模板不知道你想如何使用和在哪里使用触发器。为了使Visual Studio 2005能部署触发器,你需要把属性行前面的注释去掉,然后写上合适的属性。下表列出了Visual Studio 2005触发器模板可以使用的属性:
在本例中,生成的触发器会命名为“ti_ShowInserted”。该触发器会应用到数据库“AdventureWorks”中表“Person.ContactType”上,触发器只有在发生插入操作时才会被触发。
触发器的主要代码都在“ti_ShowInserted”方法中。该代码示例利用了ADO.NET的另一个新对象“SqlTriggerContext”。SqlTriggerContext对象提供关于触发触发器动作的信息,和触发器影响的列。“SqlTriggerContext”对象总是由“SqlContext”对象实例化的。通常,“SqlContext”对象提供关于调用者的上下文信息。在本例中尤其如此,“SqlContext”对象使代码可以访问执行触发器过程中创建的虚拟表。该虚拟表存储了能引起触发器执行的数据。
接下来,创建了“SqlPipe”对象。“SqlPipe”对象使触发器可以与外部调用者交互,在本例中它的作用是传递插入的数据值给调用者。“SqlContext”对象的“TriggerAction”属性用来判断是否触发器动作是一个插入操作。使用该属性的作用十分明确,它支持以下的值:
如果“TriggerAction”属性等于“TriggerAction.Insert”,那么说明执行了插入操作,虚拟触发器表的内容就会被查出来并通过“SqlPipe”对象的“Execute”方法送到调用者那里。为了查询虚拟表的内容,需要一个“SqlConnection”对象和一个“SqlCommand”对象。这些对象都在“System.Data.SqlClient”表空间中。你应该注意,在采用Server端编程时,“SqlConnection”对象使用的连接串必须设置“context Connection=true”的值。然后名叫“oCmd”的“SqlCommand”对象被实例化,使用语句“Select * from inserted”从虚拟表中查询所有行和列,其中包括刚插入的值。最后,“ExecuteAndSend”方法和“SqlPipe”对象用来执行命令,并把结果送回调用者。
作者
翻译
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
云端SQL Server高可用性最佳做法
与内部部署相比,在云端运行SQL Server可为数据库软件用户提供更多的灵活性和可扩展性,也可能更省钱。但云 […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
绘制数据关系图的利器:SQL Server 图像数据库工具
SQL Server 2017新增了图形数据库功能,你可以使用图结构来表示不同数据元素之间的关系。