创建、更改和删除触发器
在 SMO 中,触发器由 Trigger 对象表示。 触发器被激发时运行的 Transact-SQL 代码由 Trigger 对象的 TextBody 属性设置。 使用 Trigger 对象的其他属性(如 Update 属性)可以设置触发器的类型。 这是一个布尔属性,它指定触发器是否由对父表上的记录所执行的 UPDATE 操作激发。
Trigger 对象表示传统的数据操作语言 (DML) 触发器。 在 SQL Server 2008 和更改版本中,也同样支持数据定义语言 (DDL) 触发器。 DDL 触发器由 DatabaseDdlTrigger 对象和 ServerDdlTrigger 对象表示。
示例
若要使用所提供的任何代码示例,您必须选择创建应用程序所需的编程环境、编程模板和编程语言。有关详细信息,请参阅 SQL Server 联机丛书中的“如何在 Visual Studio .NET 中创建 Visual Basic SMO 项目”或“如何在 Visual Studio .NET 中创建 Visual C# SMO 项目”。
在 Visual Basic 中创建、更改和删除触发器
此代码示例演示如何在 AdventureWorks2012 数据库中名为 Sales 的现有表上创建并插入更新触发器。 当更新表或插入新记录时触发器会发送提醒消息。
'Connect to the local, default instance of SQL Server.
Dim mysrv As Server
mysrv = New Server
'Reference the AdventureWorks2012 2008R2 database.
Dim mydb As Database
mydb = mysrv.Databases("AdventureWorks2012")
'Declare a Table object variable and reference the Customer table.
Dim mytab As Table
mytab = mydb.Tables("Customer", "Sales")
'Define a Trigger object variable by supplying the parent table, schema ,and name in the constructor.
Dim tr As Trigger
tr = New Trigger(mytab, "Sales")
'Set TextMode property to False, then set other properties to define the trigger.
tr.TextMode = False
tr.Insert = True
tr.Update = True
tr.InsertOrder = Agent.ActivationOrder.First
Dim stmt As String
stmt = " RAISERROR('Notify Customer Relations',16,10) "
tr.TextBody = stmt
tr.ImplementationType = ImplementationType.TransactSql
'Create the trigger on the instance of SQL Server.
tr.Create()
'Remove the trigger.
tr.Drop()
在 Visual C# 中创建、更改和删除触发器
此代码示例演示如何在 AdventureWorks2012 数据库中名为 Sales 的现有表上创建并插入更新触发器。 当更新表或插入新记录时触发器会发送提醒消息。
{
//Connect to the local, default instance of SQL Server.
Server mysrv;
mysrv = new Server();
//Reference the AdventureWorks2012 database.
Database mydb;
mydb = mysrv.Databases["AdventureWorks2012"];
//Declare a Table object variable and reference the Customer table.
Table mytab;
mytab = mydb.Tables["Customer", "Sales"];
//Define a Trigger object variable by supplying the parent table, schema ,and name in the constructor.
Trigger tr;
tr = new Trigger(mytab, "Sales");
//Set TextMode property to False, then set other properties to define the trigger.
tr.TextMode = false;
tr.Insert = true;
tr.Update = true;
tr.InsertOrder = ActivationOrder.First;
string stmt;
stmt = " RAISERROR('Notify Customer Relations',16,10) ";
tr.TextBody = stmt;
tr.ImplementationType = ImplementationType.TransactSql;
//Create the trigger on the instance of SQL Server.
tr.Create();
//Remove the trigger.
tr.Drop();
}
在 PowerShell 中创建、更改和删除触发器
此代码示例演示如何在 AdventureWorks2012 数据库中名为 Sales 的现有表上创建并插入更新触发器。 当更新表或插入新记录时触发器会发送提醒消息。
# Set the path context to the local, default instance of SQL Server and to the
#database tables in Adventureworks2012
CD \sql\localhost\default\databases\AdventureWorks2012\Tables\
#Get reference to the trigger's target table
$mytab = get-item Sales.Customer
# Define a Trigger object variable by supplying the parent table, schema ,and name in the constructor.
$tr = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Trigger `
-argumentlist $mytab, "Sales"
# Set TextMode property to False, then set other properties to define the trigger.
$tr.TextMode = $false
$tr.Insert = $true
$tr.Update = $true
$tr.InsertOrder = [Microsoft.SqlServer.Management.SMO.Agent.ActivationOrder]::First
$tr.TextBody = " RAISERROR('Notify Customer Relations',16,10) "
$tr.ImplementationType = [Microsoft.SqlServer.Management.SMO.ImplementationType]::TransactSql
# Create the trigger on the instance of SQL Server.
$tr.Create()
#Remove the trigger.
$tr.Drop()