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

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)nonAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Crée un nouveau contrat.Creates a new contract. Un contrat définit les types de messages utilisés dans une conversation Service BrokerService Broker et détermine quel côté de la conversation peut envoyer des messages de ce type.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. Chaque conversation observe un contrat.Each conversation follows a contract. Le service initiateur spécifie le contrat associé à la conversation au démarrage de celle-ci.The initiating service specifies the contract for the conversation when the conversation starts. Le service cible spécifie les contrats pour lesquels il accepte des conversations.The target service specifies the contracts that the target service accepts conversations for.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax


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

ArgumentsArguments

contract_namecontract_name
Nom du contrat à créer.Is the name of the contract to create. Un nouveau contrat est créé dans la base de données active et il appartient au principal spécifié dans la clause AUTHORIZATION.A new contract is created in the current database and owned by the principal specified in the AUTHORIZATION clause. Les noms du serveur, de la base de données et du schéma ne peuvent pas être spécifiés.Server, database, and schema names cannot be specified. contract_name peut comporter jusqu’à 128 caractères.The contract_name can be up to 128 characters.

Note

Ne créez pas de contrat qui utilise le mot clé ANY pour contract_name.Do not create a contract that uses the keyword ANY for the contract_name. Lorsque vous spécifiez ANY pour un nom de contrat dans CREATE BROKER PRIORITY, la priorité est considérée pour tous les contrats.When you specify ANY for a contract name in CREATE BROKER PRIORITY, the priority is considered for all contracts. Elle n'est pas limitée à un contrat dont le nom est ANY.It is not limited to a contract whose name is ANY.

AUTHORIZATION owner_nameAUTHORIZATION owner_name
Définit comme propriétaire du contrat le rôle ou l'utilisateur de base de données spécifié.Sets the owner of the contract to the specified database user or role. Quand l’utilisateur actuel est dbo ou sa, l’argument owner_name peut être le nom de n’importe quel utilisateur ou rôle valide.When the current user is dbo or sa, owner_name can be the name of any valid user or role. Sinon, owner_name doit être le nom de l’utilisateur actuel, le nom d’un utilisateur pour lequel l’utilisateur actuel possède des autorisations d’emprunt d’identité ou le nom d’un rôle auquel appartient l’utilisateur actuel.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. Lorsque cette clause est omise, le contrat appartient à l'utilisateur actif.When this clause is omitted, the contract belongs to the current user.

message_type_namemessage_type_name
Nom d'un type de message à inclure dans le contrat.Is the name of a message type to be included as part of the contract.

SENT BYSENT BY
Spécifie quel point de terminaison peut envoyer un message du type indiqué.Specifies which endpoint can send a message of the indicated message type. Les contrats mentionnent les messages que les services peuvent utiliser pour avoir des conversations spécifiques.Contracts document the messages that services can use to have specific conversations. Chaque conversation comporte deux points de terminaison : l’initiateur (service qui démarre la conversation) et la cible (service contacté par l’initiateur).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
Indique que seul l'initiateur de la conversation peut envoyer des messages du type spécifié.Indicates that only the initiator of the conversation can send messages of the specified message type. Un service qui démarre une conversation est appelé l’initiateur de cette conversation.A service that starts a conversation is referred to as the initiator of the conversation.

TARGETTARGET
Indique que seule la cible de la conversation peut envoyer des messages du type spécifié.Indicates that only the target of the conversation can send messages of the specified message type. Un service qui accepte une conversation démarrée par un autre service est appelé la cible de cette conversation.A service that accepts a conversation that was started by another service is referred to as the target of the conversation.

ANYANY
Indique que les messages de ce type peuvent être envoyés par l'initiateur comme par la cible de la conversation.Indicates that messages of this type can be sent by both the initiator and the target.

[ DEFAULT ][ DEFAULT ]
Indique que le contrat prend en charge les messages du type de message par défaut.Indicates that this contract supports messages of the default message type. Par défaut, toutes les bases de données contiennent un type de message nommé DEFAULT.By default, all databases contain a message type named DEFAULT. Ce type de message utilise l'option de validation NONE.This message type uses a validation of NONE. Dans le contexte de cette clause, DEFAULT n'est pas un mot clé et il doit être délimité comme un identificateur.In the context of this clause, DEFAULT is not a keyword, and must be delimited as an identifier. Microsoft SQL Server fournit également un contrat DEFAULT qui spécifie le type de message DEFAULT.Microsoft SQL Server also provides a DEFAULT contract which specifies the DEFAULT message type.

Notes Remarks

L'ordre des types de messages dans le contrat n'a pas d'importance.The order of message types in the contract is not significant. Une fois que la cible a reçu le premier message, Service BrokerService Broker permet à chaque côté de la conversation d'envoyer à tout moment les messages autorisés pour ce côté.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. Par exemple, si l’initiateur de la conversation peut envoyer le type de message //Adventure-Works.com/Expenses/SubmitExpense, Service BrokerService Broker l’autorise à envoyer un nombre illimité de messages SubmitExpense au cours de la conversation.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.

Il est impossible de modifier les types de messages et leurs directions dans un contrat.The message types and directions in a contract cannot be changed. Pour modifier le paramètre AUTHORIZATION au niveau d'un contrat, utilisez l'instruction ALTER AUTHORIZATION.To change the AUTHORIZATION for a contract, use the ALTER AUTHORIZATION statement.

Un contrat doit permettre à l'initiateur d'envoyer un message.A contract must allow the initiator to send a message. L'instruction CREATE CONTRACT échoue lorsque le contrat ne contient pas au moins un type de message SENT BY ANY ou SENT BY INITIATOR.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.

Indépendamment du contrat, un service peut toujours recevoir les types de messages http://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer, http://schemas.microsoft.com/SQL/ServiceBroker/Error et http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.Regardless of the contract, a service can always receive the message types http://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer, http://schemas.microsoft.com/SQL/ServiceBroker/Error, and http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog. Service BrokerService Broker utilise ces types de messages pour la communication entre le système et l'application. uses these message types for system messages to the application.

Un contrat ne peut pas être un objet temporaire.A contract cannot be a temporary object. Les noms de contrats commençant par # sont autorisés mais ce sont des objets permanents.Contract names starting with # are permitted, but are permanent objects.

AutorisationsPermissions

Par défaut, les membres des rôles de base de données fixes db_ddladmin ou db_owner et les membres du rôle serveur fixe sysadmin peuvent créer des contrats.By default, members of the db_ddladmin or db_owner fixed database roles and the sysadmin fixed server role can create contracts.

L’autorisation REFERENCES sur un contrat est accordée par défaut au propriétaire du contrat, aux membres du rôle de base de données fixe db_ddladmin ou db_owner, ainsi qu’aux membres du rôle serveur fixe sysadmin.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.

L'utilisateur exécutant l'instruction CREATE SERVICE doit disposer de l'autorisation REFERENCES sur tous les types de messages spécifiés.The user executing the CREATE CONTRACT statement must have REFERENCES permission on all message types specified.

ExemplesExamples

A. Création d’un contratA. Creating a contract

L'exemple suivant crée un contrat de remboursement de frais basé sur trois types de messages.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           
    ) ;  

Voir aussiSee Also

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