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

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)아니요Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

새 계약을 만듭니다.Creates a new contract. 계약은 Service BrokerService Broker 대화에 사용되는 메시지 유형을 정의하며 해당 유형의 메시지를 보낼 수 있는 대화 상대도 결정합니다.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. 각 대화는 계약을 따릅니다.Each conversation follows a contract. 시작 서비스는 대화가 시작될 때 대화에 대한 계약을 지정합니다.The initiating service specifies the contract for the conversation when the conversation starts. 대상 서비스는 대상 서비스가 받아들이는 대화에 대한 계약을 지정합니다.The target service specifies the contracts that the target service accepts conversations for.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax


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

인수Arguments

contract_namecontract_name
만들 계약의 이름입니다.Is the name of the contract to create. 새 계약은 현재 데이터베이스에 생성되고 AUTHORIZATION 절에서 지정한 보안 주체가 소유합니다.A new contract is created in the current database and owned by the principal specified in the AUTHORIZATION clause. 서버, 데이터베이스 및 스키마 이름은 지정될 수 없습니다.Server, database, and schema names cannot be specified. contract_name 최대 128 자를 사용할 수 있습니다.The contract_name can be up to 128 characters.

참고

만들지 마십시오 키워드를 사용 하는 계약에 대 한 모든는 contract_name합니다.Do not create a contract that uses the keyword ANY for the contract_name. CREATE BROKER PRIORITY에서 계약 이름에 ANY를 지정하면 모든 계약에 대해 우선 순위가 고려됩니다.When you specify ANY for a contract name in CREATE BROKER PRIORITY, the priority is considered for all contracts. 이러한 규칙은 이름이 ANY인 계약으로 제한되지 않습니다.It is not limited to a contract whose name is ANY.

권한 부여 owner_nameAUTHORIZATION owner_name
지정한 데이터베이스 사용자 또는 역할로 계약의 소유자를 설정합니다.Sets the owner of the contract to the specified database user or role. 현재 사용자가 dbo 또는 sa, owner_name 유효한 사용자 또는 역할의 이름일 수 있습니다.When the current user is dbo or sa, owner_name can be the name of any valid user or role. 그렇지 않으면 owner_name 현재 사용자의 이름, 현재 사용자가을 대 한 권한을 가장 한 사용자의 이름 또는 현재 사용자가 속해 있는 역할의 이름 이어야 합니다.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. 이 절을 생략하면 계약이 현재 사용자에 속합니다.When this clause is omitted, the contract belongs to the current user.

message_type_namemessage_type_name
계약의 일부로 포함될 메시지 유형의 이름입니다.Is the name of a message type to be included as part of the contract.

SENT BYSENT BY
지정된 메시지 유형의 메시지를 보낼 수 있는 끝점을 지정합니다.Specifies which endpoint can send a message of the indicated message type. 계약은 서비스에서 특정 대화를 소유하기 위해 사용할 수 있는 메시지를 문서화합니다.Contracts document the messages that services can use to have specific conversations. 각 대화는 두 개의 끝점:는 초기자 대화를 시작한 서비스, 끝점 및 대상 끝점, 서비스는 시작 자가 연결입니다.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
대화의 시작자만 지정된 메시지 유형의 메시지를 보낼 수 있음을 나타냅니다.Indicates that only the initiator of the conversation can send messages of the specified message type. 대화를 시작 하는 서비스 라고는 초기자 대화의 합니다.A service that starts a conversation is referred to as the initiator of the conversation.

TARGETTARGET
대화의 대상만 지정된 메시지 유형의 메시지를 보낼 수 있음을 나타냅니다.Indicates that only the target of the conversation can send messages of the specified message type. 다른 서비스에 의해 시작 된 대화를 수락 하는 서비스 라고는 대상 대화의 합니다.A service that accepts a conversation that was started by another service is referred to as the target of the conversation.

ANYANY
시작자와 대상 모두 이 유형의 메시지를 보낼 수 있음을 나타냅니다.Indicates that messages of this type can be sent by both the initiator and the target.

[DEFAULT][ DEFAULT ]
이 계약에서 기본 메시지 유형의 메시지를 지원함을 나타냅니다.Indicates that this contract supports messages of the default message type. 기본적으로 모든 데이터베이스에는 DEFAULT라는 메시지 유형이 있습니다.By default, all databases contain a message type named DEFAULT. 이 메시지 유형은 유효성 검사 NONE을 사용합니다.This message type uses a validation of NONE. 이 절의 컨텍스트에서 DEFAULT는 키워드가 아니므로 식별자로 구분해야 합니다.In the context of this clause, DEFAULT is not a keyword, and must be delimited as an identifier. Microsoft SQL Server에서는 DEFAULT 메시지 유형을 지정하는 DEFAULT 계약도 제공합니다.Microsoft SQL Server also provides a DEFAULT contract which specifies the DEFAULT message type.

주의Remarks

계약에서 메시지 유형의 순서는 중요하지 않습니다.The order of message types in the contract is not significant. 대상이 첫 번째 메시지를 받으면 Service BrokerService Broker는 대화 상대 중 어느 한 쪽이 언제든지 해당 대화 상대에 허용된 메시지를 보낼 수 있도록 허용합니다.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. 예를 들어 대화의 시작자는 메시지 유형을 보낼 수 //Adventure-Works.com/Expenses/SubmitExpense, Service BrokerService Broker 개수에 관계 없이 보낼 수 있도록 허용 SubmitExpense중 대화의 메시지입니다.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.

계약에서 메시지 유형과 방향은 변경할 수 없습니다.The message types and directions in a contract cannot be changed. 계약에 대한 AUTHORIZATION을 변경하려면 ALTER AUTHORIZATION 문을 사용합니다.To change the AUTHORIZATION for a contract, use the ALTER AUTHORIZATION statement.

계약은 시작자가 메시지를 보낼 수 있도록 허용해야 합니다.A contract must allow the initiator to send a message. 계약이 하나 이상의 메시지 유형(SENT BY ANY 또는 SENT BY INITIATOR)을 포함하지 않으면 CREATE CONTRACT 문이 실패합니다.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.

계약에 관계 없이 서비스 메시지 유형을 받습니다 항상 수 http://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer, http://schemas.microsoft.com/SQL/ServiceBroker/Error, 및 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에서는 응용 프로그램에 대한 시스템 메시지에 이러한 메시지 유형을 사용합니다. uses these message types for system messages to the application.

계약은 임시 개체가 아닐 수 있습니다.A contract cannot be a temporary object. #로 시작하는 계약 이름은 허용되지만 영구 개체입니다.Contract names starting with # are permitted, but are permanent objects.

PermissionsPermissions

기본적으로의 멤버는 db_ddladmin 또는 db_owner 고정 데이터베이스 역할 및 sysadmin 고정된 서버 역할 계약을 만들 수 있습니다.By default, members of the db_ddladmin or db_owner fixed database roles and the sysadmin fixed server role can create contracts.

기본적으로 멤버의 계약의 소유자는 db_ddladmin 또는 db_owner 고정 데이터베이스 역할의 멤버는 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.

CREATE CONTRACT 문을 실행하는 사용자에게는 지정된 모든 메시지 유형에 대한 REFERENCES 권한이 있어야 합니다.The user executing the CREATE CONTRACT statement must have REFERENCES permission on all message types specified.

Examples

A. 계약 만들기A. Creating a contract

다음 예에서는 세 메시지 유형을 기반으로 경비 변제 계약을 만듭니다.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           
    ) ;  

관련 항목:See Also

계약 삭제 ( Transact SQL ) DROP CONTRACT (Transact-SQL)
EVENTDATA(Transact-SQL)EVENTDATA (Transact-SQL)