事件或事件组的列表(例如,CREATE_TABLE、DDL_EVENTS 等等)
实现 SQL Server Events 消息类型和协定的部署名称
事件数据是使用 SQL Server Events 架构以 XML 格式发送的。用于创建事件通知的常规语法是:
CREATE EVENT NOTIFICATION <name>
ON <scope>
FOR <list_of_event_or_event_groups>
TO SERVICE <deployment_name>
当事件通知被创建时,会在系统部署和由用户指定的部署之间建立 Service Broker 对话。 指定相应的 Service Broker,以便 SQL Server 为其打开对话以传递有关事件的数据。指定的部署必须实现 SQL Server Events 消息类型和协定。当发生存在相应的事件通知的事件时,会根据有关的事件数据构建一个 XML 消息,并且通过该事件通知的对话将其发送到指定的部署。
例如,以下代码创建了一个名为 T1 的表,并且定义了一个事件通知,以便每当 T1 表的架构改变时向特定的部署发送通知:
CREATE TABLE dbo.T1(col1 INT);
GO
-- Create a queue.
CREATE QUEUE SchemaChangeQueue;
GO
--Create a service on the queue that references
--the event notifications conract.
CREATE SERVICE SchemaChangeService
ON QUEUE SchemaChangeQueue
(
[//s.ms.net/SQL/Notifications/PostEventNotification/v1.0]
);
GO
--Create a route on the service to define the address
--to which Service Broker sends messages for the service.
CREATE ROUTE SchemaChangeRoute
WITH SERVICE_NAME = ''SchemaChangeService'',
ADDRESS = ''LOCAL'';
GO
--Create the event notification.
CREATE EVENT NOTIFICATION NotifySchemaChangeT1
ON TABLE dbo.T1
FOR ALTER_TABLE TO SERVICE [SchemaChangeService];
而以下 ALTER 则会导致向 SchemaChangeService(它是在 SchemaChangeQueue 之上生成的)发送一个 XML 消息:
ALTER TABLE dbo.T1 ADD col2 INT;
然后,可以用以下语句从该队列中检索 XML 消息:
RECEIVE TOP (1) CAST(message_body AS nvarchar(MAX))
FROM SchemaChangeQueue
产生的输出将如下所示(无格式化):
<EVENT_INSTANCE>
<PostTime>2004-06-15T11:16:32.963</PostTime>
<SPID>55</SPID>
<EventType>ALTER_TABLE</EventType>
<ServerName>MATRIX\S1</ServerName>
<LoginName>MATRIX\Gandalf</LoginName>
<UserName>MATRIX\Gandalf</UserName>
<DatabaseName>testdb</DatabaseName>
<SchemaName>dbo</SchemaName>
<ObjectName>T1</ObjectName>
<ObjectType>TABLE</ObjectType>
<TSQLCommand>
<SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON"
ENCRYPTED="FALSE" />
<CommandText>ALTER TABLE dbo.T1 ADD col2 INT;</CommandText>
</TSQLCommand>
</EVENT_INSTANCE>
WAITFOR 语句可以用来以阻塞模式接收通知,如下所示:
WAITFOR (RECEIVE * FROM myQueue)
小结
SQL Server 2005 Beta 2 中的 Transact-SQL 增强功能提高了您在编写查询时的表达能力,使您可以改善代码的性能,并且扩充了您的错误管理能力。Microsoft 在增强 Transact-SQL 方面不断付出的努力显示了对它在 SQL Server 中具有的重要作用、它的威力以及它的将来所怀有的坚定信念。