Bagikan melalui


BUAT KONTRAK (T-SQL)

Berlaku untuk: SQL Server Azure SQL Managed Instance

Membuat kontrak baru. Kontrak menentukan jenis pesan yang digunakan dalam percakapan Service Broker dan juga menentukan sisi percakapan mana yang dapat mengirim pesan jenis tersebut. Setiap percakapan mengikuti kontrak. Layanan memulai menentukan kontrak untuk percakapan saat percakapan dimulai. Layanan target menentukan kontrak tempat layanan target menerima percakapan.

Konvensi sintaks transact-SQL

Sintaks

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

Argumen

contract_name
Adalah nama kontrak yang akan dibuat. Kontrak baru dibuat dalam database saat ini dan dimiliki oleh prinsipal yang ditentukan dalam klausul OTORISASI. Nama server, database, dan skema tidak dapat ditentukan. contract_name dapat mencapai 128 karakter.

Catatan

Jangan membuat kontrak yang menggunakan kata kunci ANY untuk contract_name. Ketika Anda menentukan ANY untuk nama kontrak di CREATE BROKER PRIORITY, prioritas dipertimbangkan untuk semua kontrak. Ini tidak terbatas pada kontrak yang namanya ANY.

owner_name OTORISASI
Mengatur pemilik kontrak ke pengguna atau peran database yang ditentukan. Ketika pengguna saat ini adalah dbo atau sa, owner_name dapat menjadi nama pengguna atau peran yang valid. Jika tidak, owner_name harus menjadi nama pengguna saat ini, nama pengguna tempat pengguna saat ini telah meniru izin, atau nama peran tempat pengguna saat ini berada. Ketika klausa ini dihilangkan, kontrak milik pengguna saat ini.

message_type_name
Adalah nama jenis pesan yang akan disertakan sebagai bagian dari kontrak.

DIKIRIM OLEH
Menentukan titik akhir mana yang dapat mengirim pesan dari jenis pesan yang ditunjukkan. Kontrak mendokumenkan pesan yang dapat digunakan layanan untuk memiliki percakapan tertentu. Setiap percakapan memiliki dua titik akhir: titik akhir inisiator , layanan yang memulai percakapan, dan titik akhir target , layanan yang dihubungi inisiator.

INISIATOR
Menunjukkan bahwa hanya inisiator percakapan yang dapat mengirim pesan dari jenis pesan yang ditentukan. Layanan yang memulai percakapan disebut sebagai inisiator percakapan.

TARGET
Menunjukkan bahwa hanya target percakapan yang dapat mengirim pesan dari jenis pesan yang ditentukan. Layanan yang menerima percakapan yang dimulai oleh layanan lain disebut sebagai target percakapan.

ANY
Menunjukkan bahwa pesan jenis ini dapat dikirim oleh inisiator dan target.

[ DEFAULT ]
Menunjukkan bahwa kontrak ini mendukung pesan dari jenis pesan default. Secara default, semua database berisi jenis pesan bernama DEFAULT. Jenis pesan ini menggunakan validasi NONE. Dalam konteks klausul ini, DEFAULT bukan kata kunci, dan harus dibatasi sebagai pengidentifikasi. Microsoft SQL Server juga menyediakan kontrak DEFAULT yang menentukan jenis pesan DEFAULT.

Keterangan

Urutan jenis pesan dalam kontrak tidak signifikan. Setelah target menerima pesan pertama, Service Broker memungkinkan salah satu sisi percakapan untuk mengirim pesan apa pun yang diizinkan untuk sisi percakapan tersebut kapan saja. Misalnya, jika inisiator percakapan dapat mengirim jenis pesan Adventure-Works.com/Expenses/SubmitExpense, Service Broker memungkinkan inisiator untuk mengirim sejumlah pesan SubmitExpense selama percakapan.

Jenis dan petunjuk pesan dalam kontrak tidak dapat diubah. Untuk mengubah OTORISASI untuk kontrak, gunakan pernyataan ALTER AUTHORIZATION.

Kontrak harus mengizinkan inisiator mengirim pesan. Pernyataan CREATE CONTRACT gagal ketika kontrak tidak berisi setidaknya satu jenis pesan yang DIKIRIM OLEH ANY atau SENT BY INITIATOR.

Terlepas dari kontrak, layanan selalu dapat menerima jenis https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimerpesan , , https://schemas.microsoft.com/SQL/ServiceBroker/Errordan https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog. Service Broker menggunakan jenis pesan ini untuk pesan sistem ke aplikasi.

Kontrak tidak boleh berupa objek sementara. Nama kontrak yang dimulai dengan # diizinkan, tetapi merupakan objek permanen.

Izin

Secara default, anggota peran database tetap db_ddladmin atau db_owner dan peran server tetap sysadmin dapat membuat kontrak.

Secara default, pemilik kontrak, anggota peran database tetap db_ddladmin atau db_owner , dan anggota peran server tetap sysadmin memiliki izin REFERENSI pada kontrak.

Pengguna yang menjalankan pernyataan CREATE CONTRACT harus memiliki izin REFERENCES pada semua jenis pesan yang ditentukan.

Contoh

J. Membuat kontrak

Contoh berikut membuat kontrak penggantian biaya berdasarkan tiga jenis pesan.

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

Lihat Juga

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