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

SE APLICA A: síSQL Server (a partir de 2008) noAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Crea un nuevo contrato.Creates a new contract. Un contrato define los tipos de mensaje usados en una conversación de Service BrokerService Broker y también determina qué lado de la conversación puede enviar mensajes de ese tipo.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. Cada conversación obedece a un contrato.Each conversation follows a contract. El servicio iniciador especifica el contrato para la conversación cuando se inicia la conversación.The initiating service specifies the contract for the conversation when the conversation starts. El servicio de destino especifica los contratos que el servicio de destino acepta para conversaciones.The target service specifies the contracts that the target service accepts conversations for.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

contract_namecontract_name
Es el nombre del contrato que se va a crear.Is the name of the contract to create. Se crea un contrato nuevo en la base de datos actual, que pertenece a la entidad de seguridad especificada en la cláusula AUTHORIZATION.A new contract is created in the current database and owned by the principal specified in the AUTHORIZATION clause. No se pueden especificar nombres de servidor, base de datos o esquema.Server, database, and schema names cannot be specified. contract_name puede tener hasta 128 caracteres.The contract_name can be up to 128 characters.

Nota

No cree un contrato que use la palabra clave ANY para contract_name.Do not create a contract that uses the keyword ANY for the contract_name. Cuando especifica ANY para un nombre de contrato en CREATE BROKER PRIORITY, la prioridad se considera para todos los contratos.When you specify ANY for a contract name in CREATE BROKER PRIORITY, the priority is considered for all contracts. No se limita a un contrato cuyo nombre sea ANY.It is not limited to a contract whose name is ANY.

AUTHORIZATION owner_nameAUTHORIZATION owner_name
Establece el propietario del contrato en el usuario o el rol de base de datos que se ha especificado.Sets the owner of the contract to the specified database user or role. Cuando el usuario actual es dbo o sa, owner_name puede ser el nombre de cualquier usuario o rol válidos.When the current user is dbo or sa, owner_name can be the name of any valid user or role. En caso contrario, owner_name debe ser el nombre del usuario actual, el nombre de un usuario para el que el usuario actual tiene permisos de suplantación o el nombre de un rol al que pertenece el usuario actual.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. Si se omite esta cláusula, el contrato pertenece al usuario actual.When this clause is omitted, the contract belongs to the current user.

message_type_namemessage_type_name
Es el nombre de un tipo de mensaje que se incluirá como parte del contrato.Is the name of a message type to be included as part of the contract.

SENT BYSENT BY
Especifica qué extremo puede enviar un mensaje del tipo de mensaje indicado.Specifies which endpoint can send a message of the indicated message type. Los contratos documentan los mensajes que pueden usar los servicios para tener determinadas conversaciones.Contracts document the messages that services can use to have specific conversations. Cada conversación tiene dos extremos: el extremo initiator (el servicio que ha iniciado la conversación) y el extremo de target (el servicio con el que se pone en contacto el iniciador).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
Indica que solo el iniciador de la conversación puede enviar mensajes del tipo especificado.Indicates that only the initiator of the conversation can send messages of the specified message type. Un servicio que inicia una conversación se conoce como el initiator de la conversación.A service that starts a conversation is referred to as the initiator of the conversation.

TARGETTARGET
Indica que solo el destino de la conversación puede enviar mensajes del tipo especificado.Indicates that only the target of the conversation can send messages of the specified message type. Un servicio que acepta una conversación que inició otro servicio se conoce como el target de la conversación.A service that accepts a conversation that was started by another service is referred to as the target of the conversation.

ANYANY
Indica que los mensajes de este tipo se pueden enviar por el iniciador y el destino.Indicates that messages of this type can be sent by both the initiator and the target.

[DEFAULT][ DEFAULT ]
Indica que este contrato admite mensajes del tipo predeterminado.Indicates that this contract supports messages of the default message type. De forma predeterminada, todas las bases de datos contienen un tipo de mensaje denominado DEFAULT.By default, all databases contain a message type named DEFAULT. Este tipo de mensaje usa una validación de NONE.This message type uses a validation of NONE. En el contexto de esta cláusula, DEFAULT no es una palabra clave y debe delimitarse como un identificador.In the context of this clause, DEFAULT is not a keyword, and must be delimited as an identifier. Microsoft SQL Server también proporciona un contrato DEFAULT que especifica el tipo de mensaje DEFAULT.Microsoft SQL Server also provides a DEFAULT contract which specifies the DEFAULT message type.

NotasRemarks

El orden de los tipos de mensaje del contrato no es significativo.The order of message types in the contract is not significant. Después de que el destino haya recibido el primer mensaje, Service BrokerService Broker permite a cualquier lado de la conversación enviar los mensajes permitidos para ese lado de la conversación en cualquier momento.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. Por ejemplo, si el iniciador de la conversación puede enviar el tipo de mensaje //Adventure-Works.com/Expenses/SubmitExpense, Service BrokerService Broker permite al iniciador enviar cualquier número de mensajes SubmitExpense durante la conversación.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.

Los tipos de mensaje y direcciones de un contrato no se pueden cambiar.The message types and directions in a contract cannot be changed. Para cambiar AUTHORIZATION para un contrato, utilice la instrucción ALTER AUTHORIZATION.To change the AUTHORIZATION for a contract, use the ALTER AUTHORIZATION statement.

Un contrato debe permitir al iniciador enviar un mensaje.A contract must allow the initiator to send a message. La instrucción CREATE CONTRACT genera errores cuando el contrato no contiene al menos un tipo de mensaje SENT BY ANY o 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.

Independientemente del contrato, un servicio siempre puede recibir los tipos de mensaje https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer, https://schemas.microsoft.com/SQL/ServiceBroker/Error y https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.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 utiliza estos tipos de mensaje para los mensajes del sistema con destino a la aplicación.uses these message types for system messages to the application.

Un contrato no puede ser un objeto temporal.A contract cannot be a temporary object. Se permiten los nombres de contrato que empiezan por #, aunque se trata de objetos permanentes.Contract names starting with # are permitted, but are permanent objects.

PermisosPermissions

Los miembros de los roles fijos de base de datos db_ddladmin o db_owner y el rol fijo de servidor sysadmin pueden crear contratos de forma predeterminada.By default, members of the db_ddladmin or db_owner fixed database roles and the sysadmin fixed server role can create contracts.

El propietario del contrato, los miembros de los roles fijos de base de datos db_ddladmin o db_owner y los miembros del rol fijo de servidor sysadmin tienen permiso REFERENCES en un contrato de forma predeterminada.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.

El usuario que ejecuta la instrucción CREATE CONTRACT debe tener permiso REFERENCES en todos los tipos de mensaje especificados.The user executing the CREATE CONTRACT statement must have REFERENCES permission on all message types specified.

EjemplosExamples

A. Crear un contratoA. Creating a contract

En el siguiente ejemplo se crea un contrato de reembolso de gastos basándose en tres tipos de mensaje.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           
    ) ;  

Ver tambiénSee Also

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