Compartir a través de


CREATE CONTRACT (Transact-SQL)

Crea un nuevo contrato. Un contrato define los tipos de mensajes usados en una conversación de Service Broker y también determina qué extremo de la conversación puede enviar mensajes de ese tipo. Cada conversación obedece a un contrato. El servicio iniciador especifica el contrato para la conversación cuando se inicia la conversación. El servicio de destino especifica los contratos que el servicio de destino acepta para conversaciones.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • contract_name
    Es el nombre del contrato que se va a crear. Se crea un contrato nuevo en la base de datos actual, que pertenece a la entidad de seguridad especificada en la cláusula AUTHORIZATION. No se pueden especificar nombres de servidor, base de datos o esquema. El contract_name puede tener un máximo de 128 caracteres.
  • AUTHORIZATION owner_name
    Establece el propietario del contrato en el usuario o la función de base de datos que se ha especificado. Si el usuario actual es dbo o sa, owner_name puede ser el nombre de cualquier usuario o función válidos. 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 una función a la que pertenece el usuario actual. Si se omite esta cláusula, el contrato pertenece al usuario actual.
  • message_type_name
    Es el nombre de un tipo de mensaje que se incluirá como parte del contrato.
  • SENT BY
    Especifica qué extremo puede enviar un mensaje del tipo de mensaje indicado. Los contratos documentan los mensajes que pueden usar los servicios para tener determinadas conversaciones. Cada conversación tiene dos extremos: el extremo iniciador, el servicio que ha iniciado la conversación, y el extremo de destino, el servicio con el que contacta el iniciador.
  • INITIATOR
    Indica que sólo el iniciador de la conversación puede enviar mensajes del tipo especificado. Un servicio que inicia una conversación se conoce como el iniciador de la conversación.
  • TARGET
    Indica que sólo el destino de la conversación puede enviar mensajes del tipo especificado. Un servicio que acepta una conversación que inició otro servicio se conoce como el destino de la conversación.
  • ANY
    Indica que los mensajes de este tipo se pueden enviar por el iniciador y el destino.
  • [DEFAULT]
    Indica que este contrato admite mensajes del tipo predeterminado. De forma predeterminada, todas las bases de datos contienen un tipo de mensaje denominado DEFAULT. Este tipo de mensaje usa una validación de NONE. En el contexto de esta cláusula, DEFAULT no es una palabra clave y debe delimitarse como un identificador. Microsoft SQL Server también proporciona un contrato DEFAULT que especifica el tipo de mensaje DEFAULT.

Notas

El orden de los tipos de mensajes del contrato no es significativo. Después de que el destino haya recibido el primer mensaje, Service Broker permite a cualquier extremo de la conversación enviar los mensajes permitidos a ese extremo de la conversación en cualquier momento. Por ejemplo, si el iniciador de la conversación puede enviar el tipo de mensaje //Adventure-Works.com/Expenses/SubmitExpense, Service Broker permite al iniciador enviar cualquier número de mensajes SubmitExpense en cualquier momento durante la conversación.

Los tipos de mensajes y direcciones de un contrato no se pueden cambiar. Para cambiar AUTHORIZATION para un contrato, utilice la instrucción ALTER AUTHORIZATION.

Un contrato debe permitir al iniciador enviar un mensaje. 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.

Independientemente del contrato, un servicio siempre puede recibir los tipos de mensajes https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer, https://schemas.microsoft.com/SQL/ServiceBroker/Error y https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog. Service Broker utiliza estos tipos de mensajes para los mensajes del sistema a la aplicación. Para obtener más información acerca de los tipos de mensajes proporcionados por el broker, vea Mensajes de Service Broker.

Un contrato no puede ser un objeto temporal. Se permiten los nombres de contrato que empiezan por #, aunque se trata de objetos permanentes.

Permisos

De forma predeterminada, los miembros de las funciones fijas de base de datos db_ddladmin o db_owner y los miembros de la función fija de servidor sysadmin pueden crear contratos.

De forma predeterminada, el propietario del contrato, los miembros de las funciones fijas de base de datos db_ddladmin o db_owner y los miembros de la función fija de servidor sysadmin tienen el permiso REFERENCES en un contrato.

El usuario que ejecuta la instrucción CREATE CONTRACT debe tener permiso REFERENCES en todos los tipos de mensajes especificados.

Ejemplos

A. Crear un contrato

En el siguiente ejemplo se crea un contrato de reembolso de gastos basándose en tres tipos de mensajes.

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

Vea también

Referencia

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

Otros recursos

Contratos
Tipos de mensajes
Tutoriales de Service Broker

Ayuda e información

Obtener ayuda sobre SQL Server 2005