除了存储过程和用户定义函数,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”对象用来执行命令,并把结果送回调用者。
作者
翻译
TechTarget特邀编辑。2003年入软件行业,熟悉软件过程所有环节,对机构信息化的各方面有深入理解和实践经验。现就职于某互联网创业公司,目前关注互联网分布式系统架构和机器学习。喜欢传统文化社科哲学(尤喜《周易》、《老子》),喜健身喜抓举(具备抱人引体向上的能力),喜欢中国象棋(具备盲棋1对2的能力)。
相关推荐
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。
-
Notre Dame对云端SQL Server性能基准的探索实践
确立SQL Server的性能基准,对于云端迁移来说是至关重要的第一步,一位来自于University of Notre Dame 的DBA表示,他正在试图通过数据库监控软件,找出SQL server的性能基准。
-
横向扩展SQL Server应用程序:提高工作负载的选项
SQL Server管理员面临的最大挑战之一就是扩展数据库以适应更为繁重的数据处理工作负载。然而事情越发复杂的是,虽然Microsoft提供了许多不同的SQL Server可扩展性选项,但它们并不都适合于每种情况。
-
五大技巧构建首个SQL Server容器
容器的世界庞大而复杂,使用者可能会感到困扰,这里我们将列出一些示例,以便引导您顺利完成SQL Server容器的创建和管理。