CREATE CONTRACT (Transact-SQL)

Dotyczy:SQL ServerAzure SQL Managed Instance

Tworzy nową umowę. Kontrakt definiuje typy wiadomości używane w rozmowie Service Broker oraz określa, która strona rozmowy może wysyłać wiadomości tego typu. Każda rozmowa odbywa się zgodnie z umową. Usługa inicjująca określa umowę na rozmowę w momencie jej rozpoczęcia. Usługa docelowa określa kontrakty, dla których usługa docelowa przyjmuje rozmowy.

Transact-SQL konwencje składni

Składnia

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

Argumenty

contract_name
To nazwa umowy na stworzenie. Nowy kontrakt jest tworzony w aktualnej bazie danych i jest własnością podmiotu określonego w klauzuli AUTHORIZATION . Nie można podać nazw serwerów, baz danych ani schematów. contract_name może mieć do 128 znaków.

Uwaga / Notatka

Nie tworz umowy, która używa słowa kluczowego ANY dla contract_name. Gdy określasz ANY dla nazwy kontraktu w , CREATE BROKER PRIORITYpriorytet jest brany pod uwagę dla wszystkich umów. Nie ogranicza się do umowy, której nazwa jest DOWOLNA.

AUTHORIZATION owner_name
Ustawia właściciela kontraktu na określonego użytkownika lub rolę bazy danych. Gdy aktualny użytkownik jest dbo lub sa, owner_name może być nazwą dowolnego ważnego użytkownika lub roli. W przeciwnym razie musi owner_name być imieniem aktualnego użytkownika, nazwą użytkownika, dla którego aktualny użytkownik ma uprawnienia do podszywania się, lub nazwą roli, do której należy aktualny użytkownik. Gdy ta klauzula zostanie pominięta, umowa należy do aktualnego użytkownika.

message_type_name
Czy nazwa typu wiadomości ma być uwzględniona w umowie.

PRZESŁANE PRZEZ
Określa, który punkt końcowy może wysłać wiadomość o wskazanym typie wiadomości. Umowy dokumentują komunikaty, które usługi mogą wykorzystać do prowadzenia konkretnych rozmów. Każda rozmowa ma dwa punkty końcowe: punkt końcowy inicjatora , usługę, która rozpoczęła rozmowę, oraz docelowy punkt, usługę, z którą kontaktuje się inicjator.

INICJATOR
Oznacza, że tylko inicjator rozmowy może wysyłać wiadomości określonego typu wiadomości. Usługa, która rozpoczyna rozmowę, nazywana jest inicjatorem rozmowy.

CEL
Oznacza, że tylko osoba docelowa rozmowy może wysyłać wiadomości określonego typu wiadomości. Usługa, która akceptuje rozmowę rozpoczętą przez inną usługę, nazywana jest celem rozmowy.

JAKIEKOLWIEK
Wskazuje, że wiadomości tego typu mogą być wysyłane zarówno przez inicjatora, jak i przez cel.

[ ] DEFAULT
Wskazuje, że ten kontrakt obsługuje wiadomości domyślnego typu wiadomości. Domyślnie wszystkie bazy danych zawierają typ wiadomości o nazwie DEFAULT. Ten typ wiadomości wykorzystuje walidację BEZ DANYCH. W kontekście tej klauzuli nie DEFAULT jest słowem kluczowym i musi być wyznaczone jako identyfikator. Microsoft SQL Server udostępnia DEFAULT również kontrakt określający DEFAULT typ komunikatu.

Remarks

Kolejność typów wiadomości w kontrakcie nie jest istotna. Po otrzymaniu pierwszej wiadomości przez osobę docelową, Service Broker pozwala każdej ze stron rozmowy wysłać dowolną wiadomość dozwoloną dla tej strony w dowolnym momencie. Na przykład, jeśli inicjator rozmowy może wysłać wiadomość typu Adventure-Works.com/Expenses/SubmitExpense, Service Broker pozwala mu wysyłać dowolną liczbę wiadomości SubmitExpense podczas rozmowy.

Rodzaje wiadomości i instrukcje w kontrakcie nie mogą być zmieniane. Aby zmienić warunki AUTHORIZATION umowy, użyj oświadczenia ALTER AUTHORIZATION .

Umowa musi umożliwić inicjatorowi wysłanie wiadomości. Zdanie nie CREATE CONTRACT jest skuteczne, gdy umowa nie zawiera przynajmniej jednego typu wiadomości, który JEST WYSYŁANY PRZEZ DOWOLNEGO lub WYSŁANY PRZEZ INICJATORA.

Niezależnie od umowy, usługa zawsze może odbierać typy https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimerwiadomości , https://schemas.microsoft.com/SQL/ServiceBroker/Error, oraz https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog. Service Broker używa tych typów komunikatów do przesyłania komunikatów systemowych do aplikacji.

Umowa nie może być przedmiotem tymczasowym. Nazwy kontraktów zaczynające się od # są dozwolone, ale są przedmiotami trwałymi.

Permissions

Domyślnie członkowie ról db_ddladmin lub db_owner stałej bazy danych oraz roli stałego administratora systemu mogą tworzyć kontrakty.

Domyślnie właściciel umowy, członkowie ról db_ddladmin lub db_owner stałej bazy danych oraz członkowie roli administratora systemowego mają uprawnienia REFERENCJI do kontraktu.

Użytkownik wykonujący CREATE CONTRACT polecenie musi mieć uprawnienia REFERENCJI dla wszystkich określonych typów wiadomości.

Examples

A. Tworzenie umowy

Poniższy przykład tworzy umowę o zwrot kosztów na podstawie trzech typów wiadomości.

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

Zobacz też

DROP CONTRACT (Transact-SQL)
DANE ZDARZEŃ (Transact-SQL)