CREATE CONTRACT (Transact-SQL)CREATE CONTRACT (Transact-SQL)

GILT FÜR: JaSQL Server NeinAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: YesSQL Server NoAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

Erstellt einen neuen Vertrag.Creates a new contract. Ein Vertrag definiert die in einer Service BrokerService Broker-Konversation verwendeten Nachrichtentypen und legt fest, welche Seite der Konversation Nachrichten eines bestimmten Typs senden kann.A contract defines the message types that are used in a Service BrokerService Broker conversation and also determines which side of the conversation can send messages of that type. Jede Konversation folgt einem Vertrag.Each conversation follows a contract. Der initiierende Dienst gibt beim Start der Konversation den Vertrag für die Konversation an.The initiating service specifies the contract for the conversation when the conversation starts. Der Zieldienst gibt die Verträge an, für die der Zieldienst Konversationen annimmt.The target service specifies the contracts that the target service accepts conversations for.

Symbol für Themenlink Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

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

ArgumenteArguments

contract_namecontract_name
Der Name des zu erstellenden Vertrags.Is the name of the contract to create. Ein neuer Vertrag wird in der aktuellen Datenbank erstellt; der Besitzer ist der in der AUTHORIZATION-Klausel angegebene Prinzipal.A new contract is created in the current database and owned by the principal specified in the AUTHORIZATION clause. Server-, Datenbank- und Schemaname können nicht angegeben werden.Server, database, and schema names cannot be specified. contract_name kann aus bis zu 128 Zeichen bestehen.The contract_name can be up to 128 characters.

Hinweis

Erstellen Sie keinen Vertrag, der das Schlüsselwort ANY für contract_name verwendet.Do not create a contract that uses the keyword ANY for the contract_name. Wenn Sie in CREATE BROKER PRIORITY für einen Vertragsnamen ANY angeben, wird die Priorität für alle Verträge berücksichtigt.When you specify ANY for a contract name in CREATE BROKER PRIORITY, the priority is considered for all contracts. ANY steht nicht nur für einen Vertrag mit dem Namen ANY.It is not limited to a contract whose name is ANY.

AUTHORIZATION owner_nameAUTHORIZATION owner_name
Legt den Besitzer des Vertrags auf den angegebenen Datenbankbenutzer oder die angegebene Datenbankrolle fest.Sets the owner of the contract to the specified database user or role. Ist der aktuelle Benutzer dbo oder sa, kann owner_name der Name eines beliebigen gültigen Benutzers bzw. einer beliebigen gültigen Rolle sein.When the current user is dbo or sa, owner_name can be the name of any valid user or role. Andernfalls muss owner_name der Name des aktuellen Benutzers, der Name eines Benutzers, für den der aktuelle Benutzer Identitätswechselberechtigungen besitzt, oder der Name einer Rolle sein, der der aktuelle Benutzer angehört.Otherwise, owner_name must be the name of the current user, the name of a user that the current user has impersonate permissions for, or the name of a role to which the current user belongs. Wenn diese Klausel weggelassen wird, gehört der Vertrag dem aktuellen Benutzer.When this clause is omitted, the contract belongs to the current user.

message_type_namemessage_type_name
Der Name eines in den Vertrag eingeschlossenen Nachrichtentyps.Is the name of a message type to be included as part of the contract.

SENT BYSENT BY
Gibt an, welcher Endpunkt eine Nachricht vom angegebenen Nachrichtentyp senden kann.Specifies which endpoint can send a message of the indicated message type. Verträge dokumentieren die Nachrichten, die von Diensten für bestimmte Konversationen verwendet werden können.Contracts document the messages that services can use to have specific conversations. 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.Each conversation has two endpoints: the initiator endpoint, the service that started the conversation, and the target endpoint, the service that the initiator is contacting.

INITIATORINITIATOR
Gibt an, dass nur der Initiator der Konversation Nachrichten eines bestimmten Nachrichtentyps senden kann.Indicates that only the initiator of the conversation can send messages of the specified message type. Ein Dienst, der eine Konversation startet, wird als der Initiator der Konversation bezeichnet.A service that starts a conversation is referred to as the initiator of the conversation.

TARGETTARGET
Gibt an, dass nur das Ziel der Konversation Nachrichten eines bestimmten Nachrichtentyps senden kann.Indicates that only the target of the conversation can send messages of the specified message type. Ein Dienst, der eine von einem anderen Dienst begonnene Konversation annimmt, wird als das Ziel der Konversation bezeichnet.A service that accepts a conversation that was started by another service is referred to as the target of the conversation.

ANYANY
Gibt an, dass Nachrichten dieses Typs sowohl vom Initiator als auch vom Ziel gesendet werden können.Indicates that messages of this type can be sent by both the initiator and the target.

[DEFAULT][ DEFAULT ]
Gibt an, dass dieser Vertrag Nachrichten vom Standardnachrichtentyp unterstützt.Indicates that this contract supports messages of the default message type. Standardmäßig enthalten alle Datenbanken einen Nachrichtentyp namens DEFAULT.By default, all databases contain a message type named DEFAULT. Dieser Nachrichtentyp verwendet NONE für die Überprüfung.This message type uses a validation of NONE. Im Kontext dieser Klausel ist DEFAULT kein Schlüsselwort und muss als Bezeichner begrenzt sein.In the context of this clause, DEFAULT is not a keyword, and must be delimited as an identifier. Microsoft SQL Server stellt auch einen DEFAULT-Vertrag bereit, der den Nachrichtentyp DEFAULT angibt.Microsoft SQL Server also provides a DEFAULT contract which specifies the DEFAULT message type.

BemerkungenRemarks

Die Reihenfolge von Nachrichtentypen im Vertrag ist nicht von Bedeutung.The order of message types in the contract is not significant. Nachdem das Ziel die erste Nachricht erhalten hat, ermöglicht Service BrokerService Broker beiden Seiten der Konversation, zu jeder Zeit Nachrichten zu senden, die für die jeweilige Konversationsseite zulässig sind.After the target has received the first message, Service BrokerService Broker allows either side of the conversation to send any message allowed for that side of the conversation at any time. Kann der Initiator der Konversation beispielsweise den Nachrichtentyp //Adventure-Works.com/Expenses/SubmitExpense senden, ermöglicht Service BrokerService Broker dem Initiator das Senden beliebig vieler SubmitExpense-Nachrichten zu jeder Zeit im Verlauf der Konversation.For example, if the initiator of the conversation can send the message type //Adventure-Works.com/Expenses/SubmitExpense, Service BrokerService Broker allows the initiator to send any number of SubmitExpense messages during the conversation.

Die Nachrichtentypen und -richtungen in einem Vertrag können nicht geändert werden.The message types and directions in a contract cannot be changed. Verwenden Sie die ALTER AUTHORIZATION-Anweisung, wenn Sie den Wert von AUTHORIZATION für einen Vertrag ändern möchten.To change the AUTHORIZATION for a contract, use the ALTER AUTHORIZATION statement.

Ein Vertrag muss dem Initiator das Senden einer Nachricht ermöglichen.A contract must allow the initiator to send a message. Die CREATE CONTRACT-Anweisung erzeugt einen Fehler, wenn der Vertrag nicht zumindest den Nachrichtentyp SENT BY ANY oder SENT BY INITIATOR enthält.The CREATE CONTRACT statement fails when the contract does not contain at least one message type that is SENT BY ANY or SENT BY INITIATOR.

Unabhängig vom Vertrag kann ein Dienst immer die Nachrichtentypen https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer, https://schemas.microsoft.com/SQL/ServiceBroker/Error und https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog empfangen.Regardless of the contract, a service can always receive the message types https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer, https://schemas.microsoft.com/SQL/ServiceBroker/Error, and https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog. Service BrokerService Broker verwendet diese Nachrichtentypen für Systemnachrichten an die Anwendung.uses these message types for system messages to the application.

Ein Vertrag kann kein temporäres Objekt sein.A contract cannot be a temporary object. Vertragsnamen, die mit # beginnen, sind zulässig. Es handelt sich dabei jedoch um dauerhafte Objekte.Contract names starting with # are permitted, but are permanent objects.

BerechtigungenPermissions

Standardmäßig können Mitglieder der festen Datenbankrolle db_ddladmin oder db_owner sowie der festen Serverrolle sysadmin Verträge erstellen.By default, members of the db_ddladmin or db_owner fixed database roles and the sysadmin fixed server role can create contracts.

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.By default, the owner of the contract, members of the db_ddladmin or db_owner fixed database roles, and members of the sysadmin fixed server role have REFERENCES permission on a contract.

Der Benutzer, der die CREATE CONTRACT-Anweisung ausführt, benötigt die REFERENCES-Berechtigung für alle angegebenen Nachrichtentypen.The user executing the CREATE CONTRACT statement must have REFERENCES permission on all message types specified.

BeispieleExamples

A. Erstellen eines VertragsA. Creating a contract

Im folgenden Beispiel wird ein Aufwandentschädigungsvertrag auf der Basis von drei Nachrichtentypen erstellt.The following example creates an expense reimbursement contract based on three message types.

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           
    ) ;  

Weitere InformationenSee Also

DROP CONTRACT (Transact-SQL) DROP CONTRACT (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)