(0) exportieren Drucken
Alle erweitern
Erweitern Minimieren

CREATE CONTRACT (Transact-SQL)

Erstellt einen neuen Vertrag. Ein Vertrag definiert die in einer Service Broker-Konversation verwendeten Nachrichtentypen und legt fest, welche Seite der Konversation Nachrichten eines bestimmten Typs senden kann. Jede Konversation folgt einem Vertrag. Der initiierende Dienst gibt zu Beginn der Konversation den Vertrag für die Konversation an. Der Zieldienst gibt die Verträge an, für die der Zieldienst Konversationen annimmt.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen


CREATE CONTRACT contract_name
   [ AUTHORIZATION owner_name ]
      (  {   { message_type_name | [ DEFAULT ] }
          SENT BY { INITIATOR | TARGET | ANY } 
       } [ ,...n] ) 
[ ; ]

contract_name

Der Name des zu erstellenden Vertrags. Ein neuer Vertrag wird in der aktuellen Datenbank erstellt; der Besitzer ist der in der AUTHORIZATION-Klausel angegebene Prinzipal. Server-, Datenbank- und Schemaname können nicht angegeben werden. contract_name kann bis zu 128 Zeichen lang sein.

AUTHORIZATION owner_name

Legt den Besitzer des Vertrags auf den angegebenen Datenbankbenutzer oder die angegebene Datenbankrolle fest. Ist der aktuelle Benutzer dbo oder sa, kann owner_name der Name eines beliebigen gültigen Benutzers bzw. einer beliebigen gültigen Rolle sein. Andernfalls muss owner_name der Name des aktuellen Benutzers, der Name eines Benutzers, für den der aktuelle Benutzer IMPERSONATE-Berechtigungen besitzt, oder der Name einer Rolle sein, der der aktuelle Benutzer angehört. Wenn diese Klausel weggelassen wird, gehört der Vertrag dem aktuellen Benutzer.

message_type_name

Der Name eines in den Vertrag eingeschlossenen Nachrichtentyps.

SENT BY

Gibt an, welcher Endpunkt eine Nachricht vom angegebenen Nachrichtentyp senden kann. Verträge dokumentieren die Nachrichten, die von Diensten für bestimmte Konversationen verwendet werden können. Jede Konversation verfügt über zwei Endpunkte: den initiator-Endpunkt, wobei es sich um den Dienst handelt, der die Konversation gestartet hat, und den target-Endpunkt, wobei es sich um den Dienst handelt, mit dem der Initiator Kontakt aufnimmt.

INITIATOR

Gibt an, dass nur der Initiator der Konversation Nachrichten eines bestimmten Nachrichtentyps senden kann. Ein Dienst, der eine Konversation beginnt, wird als der Initiator der Konversation bezeichnet.

TARGET

Gibt an, dass nur das Ziel der Konversation Nachrichten eines bestimmten Nachrichtentyps senden kann. Ein Dienst, der eine von einem anderen Dienst begonnene Konversation annimmt, wird als das Ziel der Konversation bezeichnet.

ANY

Gibt an, dass Nachrichten dieses Typs sowohl vom Initiator als auch vom Ziel gesendet werden können.

[DEFAULT]

Gibt an, dass dieser Vertrag Nachrichten vom Standardnachrichtentyp unterstützt. Standardmäßig enthalten alle Datenbanken einen Nachrichtentyp namens DEFAULT. Dieser Nachrichtentyp verwendet NONE für die Überprüfung. Im Kontext dieser Klausel ist DEFAULT kein Schlüsselwort und muss als Bezeichner begrenzt sein. Microsoft SQL Server stellt auch einen DEFAULT-Vertrag bereit, der den Nachrichtentyp DEFAULT angibt.

Die Reihenfolge von Nachrichtentypen im Vertrag ist nicht von Bedeutung. Nachdem das Ziel die erste Nachricht erhalten hat, ermöglicht Service Broker beiden Seiten der Konversation, zu jeder Zeit Nachrichten zu senden, die für die jeweilige Konversationsseite zulässig sind. Kann der Initiator der Konversation beispielsweise den Nachrichtentyp //Adventure-Works.com/Expenses/SubmitExpense senden, ermöglicht Service Broker dem Initiator das Senden beliebig vieler SubmitExpense-Nachrichten zu jeder Zeit im Verlauf der Konversation.

Die Nachrichtentypen und -richtungen in einem Vertrag können nicht geändert werden. Verwenden Sie die ALTER AUTHORIZATION-Anweisung, wenn Sie den Wert von AUTHORIZATION für einen Vertrag ändern möchten.

Ein Vertrag muss dem Initiator das Senden einer Nachricht ermöglichen. Die CREATE CONTRACT-Anweisung erzeugt einen Fehler, wenn der Vertrag nicht zumindest den Nachrichtentyp SENT BY ANY oder SENT BY INITIATOR enthält.

Unabhängig vom Vertrag kann ein Dienst immer die Nachrichtentypen http://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer, http://schemas.microsoft.com/SQL/ServiceBroker/Error und http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog empfangen. Service Broker verwendet diese Nachrichtentypen für Systemnachrichten an die Anwendung. Weitere Informationen zu Nachrichtentypen, die von Service Broker bereitgestellt werden, finden Sie unter Broker-Nachrichten.

Ein Vertrag ist möglicherweise kein temporäres Objekt. Vertragsnamen, die mit # beginnen, sind zulässig. Es handelt sich dabei jedoch um dauerhafte Objekte.

Standardmäßig können Mitglieder der festen Datenbankrolle db_ddladmin oder db_owner sowie der festen Serverrolle sysadmin Verträge erstellen.

Standardmäßig verfügen der Besitzer des Vertrags, Mitglieder der festen Datenbankrolle db_ddladmin oder db_owner sowie Mitglieder der festen Serverrolle sysadmin über die REFERENCES-Berechtigung für einen Vertrag.

Der Benutzer, der die CREATE CONTRACT-Anweisung ausführt, benötigt die REFERENCES-Berechtigung für alle angegebenen Nachrichtentypen.

A. Erstellen eines Vertrags

Im folgenden Beispiel wird ein Aufwandentschädigungsvertrag auf der Basis von drei Nachrichtentypen erstellt.

CREATE MESSAGE TYPE
    [//Adventure-Works.com/Expenses/SubmitExpense]         
    VALIDATION = WELL_FORMED_XML ;         

CREATE MESSAGE TYPE
    [//Adventure-Works.com/Expenses/ExpenseApprovedOrDenied]         
    VALIDATION = WELL_FORMED_XML ;         

CREATE MESSAGE TYPE         
    [//Adventure-Works.com/Expenses/ExpenseReimbursed]         
    VALIDATION= WELL_FORMED_XML ;         

CREATE CONTRACT          
    [//Adventure-Works.com/Expenses/ExpenseSubmission]         
    ( [//Adventure-Works.com/Expenses/SubmitExpense]         
          SENT BY INITIATOR,         
      [//Adventure-Works.com/Expenses/ExpenseApprovedOrDenied]         
          SENT BY TARGET,         
      [//Adventure-Works.com/Expenses/ExpenseReimbursed]         
          SENT BY TARGET         
    ) ;

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft