CREATE EVENT NOTIFICATION (Transact-SQL)CREATE EVENT NOTIFICATION (Transact-SQL)

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Erstellt ein Objekt, das Informationen über eine Datenbank oder ein Serverereignis an einen Service Broker-Dienst sendet.Creates an object that sends information about a database or server event to a service broker service. Ereignisbenachrichtigungen werden nur mithilfe von Transact-SQLTransact-SQL-Anweisungen erstellt.Event notifications are created only by using Transact-SQLTransact-SQL statements.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax


CREATE EVENT NOTIFICATION event_notification_name   
ON { SERVER | DATABASE | QUEUE queue_name }   
[ WITH FAN_IN ]  
FOR { event_type | event_group } [ ,...n ]  
TO SERVICE 'broker_service' , { 'broker_instance_specifier' | 'current database' }  
[ ; ]  

ArgumenteArguments

event_notification_nameevent_notification_name
Ist der Name der ereignisbenachrichtigung.Is the name of the event notification. Ein Name der serverereignisbenachrichtigung muss den Regeln für entsprechen Bezeichner muss eindeutig innerhalb des Bereichs, in dem sie erstellt werden: SERVER, DATABASE oder Object_name.An event notification name must comply with the rules for identifiers and must be unique within the scope in which they are created: SERVER, DATABASE, or object_name.

SERVERSERVER
Wendet den Bereich der Ereignisbenachrichtigung auf die aktuelle Instanz von SQL ServerSQL Server an.Applies the scope of the event notification to the current instance of SQL ServerSQL Server. Ist dieser Bereich angegeben, wird die Benachrichtigung jedes Mal ausgelöst, wenn das angegebene Ereignis in der FOR-Klausel irgendwo in der Instanz von SQL ServerSQL Server auftritt.If specified, the notification fires whenever the specified event in the FOR clause occurs anywhere in the instance of SQL ServerSQL Server.

Hinweis

Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.This option is not available in a contained database.

DATABASEDATABASE
Wendet den Bereich der Ereignisbenachrichtigung auf die aktuelle Datenbank an.Applies the scope of the event notification to the current database. Ist dieser Bereich angegeben, wird die Benachrichtigung jedes Mal ausgelöst, wenn das angegebene Ereignis in der FOR-Klausel in der aktuellen Datenbank auftritt.If specified, the notification fires whenever the specified event in the FOR clause occurs in the current database.

QUEUEQUEUE
Wendet den Bereich der Benachrichtigung auf eine bestimmte Warteschlange in der aktuellen Datenbank an.Applies the scope of the notification to a specific queue in the current database. QUEUE kann nur angegeben werden, wenn auch FOR QUEUE_ACTIVATION oder FOR BROKER_QUEUE_DISABLED angegeben ist.QUEUE can be specified only if FOR QUEUE_ACTIVATION or FOR BROKER_QUEUE_DISABLED is also specified.

Warteschlangennamequeue_name
Der Name der Warteschlange, auf die die Ereignisbenachrichtigung angewendet wird.Is the name of the queue to which the event notification applies. Warteschlangenname kann nur angegeben werden, wenn QUEUE angegeben ist.queue_name can be specified only if QUEUE is specified.

WITH FAN_INWITH FAN_IN
Weist SQL ServerSQL Server an, nur eine Nachricht pro Ereignis an einen beliebigen angegebenen Dienst zu senden, wenn für Ereignisbenachrichtigungen Folgendes gilt:Instructs SQL ServerSQL Server to send only one message per event to any specified service for all event notifications that:

  • Sie werden für dasselbe Ereignis erstellt.Are created on the same event.

  • Sie werden vom selben Prinzipal erstellt (erkennbar an der identischen Sicherheits-ID).Are created by the same principal (as identified by the same SID).

  • Geben Sie denselben Dienst und Broker_instance_specifier.Specify the same service and broker_instance_specifier.

  • Sie geben WITH FAN_IN an.Specify WITH FAN_IN.

    Beispielsweise werden drei Ereignisbenachrichtigungen erstellt.For example, three event notifications are created. Bei allen Ereignisbenachrichtigungen wird FOR ALTER_TABLE, WITH FAN_IN und dieselbe TO SERVICE-Klausel angegeben, und alle werden von derselben SID erstellt.All event notifications specify FOR ALTER_TABLE, WITH FAN_IN, the same TO SERVICE clause, and are created by the same SID. Wenn eine ALTER TABLE-Anweisung ausgeführt wird, werden die durch diese drei Ereignisbenachrichtigungen erstellten Nachrichten in eine Nachricht zusammengeführt.When an ALTER TABLE statement is run, the messages that are created by these three event notifications are merged into one. Daher empfängt der Zieldienst nur eine Nachricht bezüglich des Ereignisses.Therefore, the target service receives only one message of the event.

    event_typeevent_type
    Der Name eines Ereignistyps, der die Ausführung der Ereignisbenachrichtigung verursacht.Is the name of an event type that causes the event notification to execute. Event_type kann eine Transact-SQLTransact-SQL DDL-Ereignis des Typs, einer SQL-Ablaufverfolgungs-Ereignistyp oder ein Service BrokerService Broker -Ereignis des Typs.event_type can be a Transact-SQLTransact-SQL DDL event type, a SQL Trace event type, or a Service BrokerService Broker event type. Eine Liste aller qualifizierenden Transact-SQLTransact-SQL DDL-Ereignistypen finden Sie unter DDL-Ereignisse.For a list of qualifying Transact-SQLTransact-SQL DDL event types, see DDL Events. Service BrokerService Broker-Ereignistypen sind QUEUE_ACTIVATION und BROKER_QUEUE_DISABLED. event types are QUEUE_ACTIVATION and BROKER_QUEUE_DISABLED. Weitere Informationen finden Sie unter Event Notifications.For more information, see Event Notifications.

    event_groupevent_group
    Der Name einer vordefinierten Gruppe von Transact-SQLTransact-SQL- oder SQL-Ablaufverfolgungs-Ereignistypen.Is the name of a predefined group of Transact-SQLTransact-SQL or SQL Trace event types. Eine Ereignisbenachrichtigung kann nach der Ausführung eines beliebigen Ereignisses ausgelöst werden, das zu einer Ereignisgruppe gehört.An event notification can fire after execution of any event that belongs to an event group. Eine Liste der DDL-Ereignisgruppen die Transact-SQLTransact-SQL abgedeckten Ereignisse sowie den Bereich an, an dem sie definiert werden können, finden Sie unter DDL-Ereignisgruppen.For a list of DDL event groups, the Transact-SQLTransact-SQL events they cover, and the scope at which they can be defined, see DDL Event Groups.

    Event_group auch fungiert als ein Makro, wenn die CREATE EVENT NOTIFICATION-Anweisung abgeschlossen ist, durch die Ereignistypen hinzufügen Ereignistypen die sys.events -Katalogsicht angezeigt.event_group also acts as a macro, when the CREATE EVENT NOTIFICATION statement finishes, by adding the event types it covers to the sys.events catalog view.

    " Broker_service "' broker_service '
    Gibt den Zieldienst an, der die Ereignisinstanzdaten empfängt.Specifies the target service that receives the event instance data. SQL ServerSQL Server öffnet eine oder mehrere Konversationen für den Zieldienst der Ereignisbenachrichtigung. opens one or more conversations to the target service for the event notification. Der Dienst muss denselben SQL ServerSQL Server-Ereignismeldungstyp und Vertrag berücksichtigen, wie sie zum Senden der Nachricht verwendet werden.This service must honor the same SQL ServerSQL Server Events message type and contract that is used to send the message.

    Die Konversationen bleiben geöffnet, bis die Ereignisbenachrichtigung gelöscht wird.The conversations remain open until the event notification is dropped. Bestimmte Fehler können dazu führen, dass Konversationen früher geschlossen werden.Certain errors could cause the conversations to close earlier. Das explizite Beenden einiger oder aller Konversationen kann verhindern, dass der Zieldienst weitere Nachrichten empfängt.Ending some or all conversations explicitly might prevent the target service from receiving more messages.

    { "Broker_instance_specifier" | 'current Database' }{ 'broker_instance_specifier' | 'current database' }
    Gibt an, für die Service Broker-Instanz Broker_service aufgelöst wird.Specifies a service broker instance against which broker_service is resolved. Der Wert für einen bestimmten Service Broker kann durch Abfragen abgerufen werden die Service_broker_guid Spalte die sys.databases -Katalogsicht angezeigt.The value for a specific service broker can be acquired by querying the service_broker_guid column of the sys.databases catalog view. Verwendung 'current Database' an die Service Broker-Instanz in der aktuellen Datenbank.Use 'current database' to specify the service broker instance in the current database. 'current Database' ist ein Groß-/Kleinschreibung Zeichenfolgenliteral.'current database' is a case-insensitive string literal.

Hinweis

Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.This option is not available in a contained database.

HinweiseRemarks

Service BrokerService Broker beinhaltet einen speziellen Nachrichtentyp und Vertrag für Ereignisbenachrichtigungen. includes a message type and contract specifically for event notifications. Es muss also kein initiierender Dienst für Service Broker erstellt werden; dieser ist bereits vorhanden und gibt den folgenden Vertragsnamen an: http://schemas.microsoft.com/SQL/Notifications/PostEventNotificationTherefore, a Service Broker initiating service does not have to be created because one already exists that specifies the following contract name: http://schemas.microsoft.com/SQL/Notifications/PostEventNotification

Der Zieldienst, der Ereignisbenachrichtigungen empfängt, muss diesen bereits vorhandenen Vertrag berücksichtigen.The target service that receives event notifications must honor this preexisting contract.

Wichtig

Service BrokerService Broker -Dialogsicherheit sollte für Ereignisbenachrichtigungen konfiguriert werden, die Meldungen an einen Service Broker auf einem Remoteserver senden. dialog security should be configured for event notifications that send messages to a service broker on a remote server. Die Dialogsicherheit muss manuell entsprechend dem Modell der vollständigen Sicherheit konfiguriert werden.Dialog security must be configured manually according to the full security model. Weitere Informationen finden Sie unter Konfigurieren der Dialogsicherheit für Ereignisbenachrichtigungen.For more information, see Configure Dialog Security for Event Notifications.

Wird für eine Ereignistransaktion, die eine Benachrichtigung aktiviert, ein Rollback ausgeführt, wird das Rollback auch für das Senden der Ereignisbenachrichtigung ausgeführt.If an event transaction that activates a notification is rolled back, the sending of the event notification is also rolled back. Benachrichtigungen werden nicht durch eine in einem Trigger definierte Aktion ausgelöst, wenn ein Commit oder Rollback der Transaktion im Trigger ausgeführt wird.Event notifications do not fire by an action defined in a trigger when the transaction is committed or rolled back inside the trigger. Da Ablaufverfolgungsereignisse nicht durch Transaktionen gebunden werden, werden auf Ablaufverfolgungsereignissen basierende Ereignisbenachrichtigungen unabhängig davon gesendet, ob für die Transaktion, durch die sie aktiviert werden, ein Rollback ausgeführt wird.Because trace events are not bound by transactions, event notifications based on trace events are sent regardless of whether the transaction that activates them is rolled back.

Wird die Konversation zwischen Server und Zieldienst nach dem Auslösen einer Ereignisbenachrichtigung unterbrochen, wird ein Fehler gemeldet und die Ereignisbenachrichtigung gelöscht.If the conversation between the server and the target service is broken after an event notification fires, an error is reported and the event notification is dropped.

Die Ereignistransaktion, von der die Benachrichtigung ursprünglich gestartet wurde, wird nicht davon betroffen, ob die Ereignisbenachrichtigung erfolgreich gesendet wurde.The event transaction that originally started the notification is not affected by the success or failure of the sending of the event notification.

Alle Fehler beim Senden einer Ereignisbenachrichtigung werden protokolliert.Any failure to send an event notification is logged.

BerechtigungenPermissions

Zum Erstellen einer Ereignisbenachrichtigung mit der Datenbank als Bereich (ON DATABASE) ist die CREATE DATABASE DDL EVENT NOTIFICATION-Berechtigung in der aktuellen Datenbank erforderlich.To create an event notification that is scoped to the database (ON DATABASE), requires CREATE DATABASE DDL EVENT NOTIFICATION permission in the current database.

Zum Erstellen einer Ereignisbenachrichtigung für eine DDL-Anweisung mit dem Server als Bereich (ON SERVER) ist die CREATE DDL EVENT NOTIFICATION-Berechtigung auf dem Server erforderlich.To create an event notification on a DDL statement that is scoped to the server (ON SERVER), requires CREATE DDL EVENT NOTIFICATION permission in the server.

Zum Erstellen einer Ereignisbenachrichtigung für ein Ablaufverfolgungsereignis ist die CREATE TRACE EVENT NOTIFICATION-Berechtigung auf dem Server erforderlich.To create an event notification on a trace event, requires CREATE TRACE EVENT NOTIFICATION permission in the server.

Zum Erstellen einer Ereignisbenachrichtigung mit einer Warteschlange als Bereich ist die ALTER-Berechtigung für die Warteschlange erforderlich.To create an event notification that is scoped to a queue, requires ALTER permission on the queue.

BeispieleExamples

Hinweis

In den nachfolgenden Beispielen A und B entspricht der GUID in der TO SERVICE 'NotifyService'-Klausel ('8140a771-3c4b-4479-8ac0-81008ab17984') dem Computer, auf dem das Beispiel eingerichtet wurde.In Examples A and B below, the GUID in the TO SERVICE 'NotifyService' clause ('8140a771-3c4b-4479-8ac0-81008ab17984') is specific to the computer on which the example was set up. Für diese Instanz handelt es sich dabei um den GUID für die AdventureWorks2012AdventureWorks2012-Datenbank.For that instance, that was the GUID for the AdventureWorks2012AdventureWorks2012 database.

Zum Kopieren und Ausführen dieser Beispiele müssen Sie diesen GUID durch einen GUID von Ihrem Computer und Ihrer SQL ServerSQL Server-Instanz ersetzen.To copy and run these examples, you need to replace this GUID with one from your computer and SQL ServerSQL Server instance. Wie im obigen Abschnitt "Argumente" erläutert, können Sie erwerben der "Broker_instance_specifier" durch Abfragen der Service_broker_guid-Spalte der sys.databases -Katalogsicht.As explained in the Arguments section above, you can acquire the 'broker_instance_specifier' by querying the service_broker_guid column of the sys.databases catalog view.

A.A. Erstellen einer Ereignisbenachrichtigung mit dem Server als BereichCreating an event notification that is server scoped

Im folgenden Beispiel werden die zum Einrichten eines Zieldiensts mit Service BrokerService Broker erforderlichen Objekte erstellt.The following example creates the required objects to set up a target service using Service BrokerService Broker. Der Zieldienst verweist auf den Nachrichtentyp und den Vertrag des initiierenden Diensts speziell für Ereignisbenachrichtigungen.The target service references the message type and contract of the initiating service specifically for event notifications. Dann wird auf dem Zieldienst eine Ereignisbenachrichtigung erstellt, die eine Benachrichtigung sendet, sobald ein Object_Created-Ablaufverfolgungsereignis auf der Instanz von SQL ServerSQL Server vorliegt.Then an event notification is created on that target service that sends a notification whenever an Object_Created trace event happens on the instance of SQL ServerSQL Server.

--Create a queue to receive messages.  
CREATE QUEUE NotifyQueue ;  
GO  
--Create a service on the queue that references  
--the event notifications contract.  
CREATE SERVICE NotifyService  
ON QUEUE NotifyQueue  
([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);  
GO  
--Create a route on the service to define the address   
--to which Service Broker sends messages for the service.  
CREATE ROUTE NotifyRoute  
WITH SERVICE_NAME = 'NotifyService',  
ADDRESS = 'LOCAL';  
GO  
--Create the event notification.  
CREATE EVENT NOTIFICATION log_ddl1   
ON SERVER   
FOR Object_Created   
TO SERVICE 'NotifyService',  
    '8140a771-3c4b-4479-8ac0-81008ab17984' ;  

B.B. Erstellen einer Ereignisbenachrichtigung mit der Datenbank als BereichCreating an event notification that is database scoped

Im folgenden Beispiel wird eine Ereignisbenachrichtigung für denselben Zieldienst wie im vorherigen Beispiel erstellt.The following example creates an event notification on the same target service as the previous example. Die Ereignisbenachrichtigung wird ausgelöst, nachdem ein ALTER_TABLE-Ereignis in der AdventureWorks2012AdventureWorks2012-Beispieldatenbank aufgetreten ist.The event notification fires after an ALTER_TABLE event occurs on the AdventureWorks2012AdventureWorks2012 sample database.

CREATE EVENT NOTIFICATION Notify_ALTER_T1  
ON DATABASE  
FOR ALTER_TABLE  
TO SERVICE 'NotifyService',  
    '8140a771-3c4b-4479-8ac0-81008ab17984';  

C.C. Abrufen von Informationen zu einer Ereignisbenachrichtigung mit dem Server als BereichGetting information about an event notification that is server scoped

Im folgenden Beispiel wird die sys.server_event_notifications-Katalogsicht für Metadaten zur Ereignisbenachrichtigung log_ddl1 abgefragt, die mit dem Serverbereich erstellt wurde.The following example queries the sys.server_event_notifications catalog view for metadata about event notification log_ddl1 that was created with server scope.

SELECT * FROM sys.server_event_notifications  
WHERE name = 'log_ddl1';  

D.D. Abrufen von Informationen zu einer Ereignisbenachrichtigung mit der Datenbank als BereichGetting information about an event notification that is database scoped

Im folgenden Beispiel wird die sys.event_notifications-Katalogsicht für Metadaten zur Ereignisbenachrichtigung Notify_ALTER_T1 abgefragt, die mit dem Datenbankbereich erstellt wurde.The following example queries the sys.event_notifications catalog view for metadata about event notification Notify_ALTER_T1 that was created with database scope.

SELECT * FROM sys.event_notifications  
WHERE name = 'Notify_ALTER_T1';  

Siehe auchSee Also

Ereignisbenachrichtigungen Event Notifications
DROP EVENT NOTIFICATION ( Transact-SQL ) DROP EVENT NOTIFICATION (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
Sys. event_notifications ( Transact-SQL ) sys.event_notifications (Transact-SQL)
Sys. server_event_notifications ( Transact-SQL ) sys.server_event_notifications (Transact-SQL)
Sys.Events ( Transact-SQL ) sys.events (Transact-SQL)
Sys. server_events ( Transact-SQL )sys.server_events (Transact-SQL)