CREATE SERVICE (Transact-SQL)
建立新的服務。Service Broker 服務是一項特定工作或一組工作的名稱。Service Broker 會利用服務的名稱來遞送訊息,將訊息傳送到資料庫內的正確佇列,以及強制使用交談的合約。
- service_name
-
這是要建立的服務名稱。新服務會建立在目前資料庫中,擁有者是 AUTHORIZATION 子句所指定的主體。您不可指定伺服器、資料庫和結構描述名稱。service_name 必須是有效的 sysname。
- AUTHORIZATION owner_name
-
將服務的擁有者設為指定的資料庫使用者或角色。當目前的使用者是 dbo 或 sa 時,owner_name 可以是任何有效使用者或角色的名稱。否則,owner_name 必須是目前使用者的名稱、目前使用者有其 IMPERSONATE 權限的使用者名稱,或目前使用者所屬的角色名稱。
- ON QUEUE [ schema_name .] queue_name
-
指定接收服務訊息的佇列。佇列必須在服務的相同資料庫中。如果未提供 schema_name,結構描述就是執行陳述式的使用者之預設結構描述。
- contract_name
-
指定目標可以是這項服務的合約。服務程式會利用指定的合約來起始與這項服務的交談。如果未指定任何合約,服務就只能起始交談。
- [DEFAULT]
-
指定這項服務可以是遵照 DEFAULT 合約的交談目標。在這個子句的內容中,DEFAULT 不是關鍵字,必須用識別碼來分隔。DEFAULT 合約允許交談的兩端傳送訊息類型是 DEFAULT 的訊息。訊息類型 DEFAULT 所用的驗證是 NONE。
建立服務的權限,會預設給 db_ddladmin 或 db_owner 固定資料庫角色的成員,以及系統管理員 (sysadmin) 固定伺服器角色的成員。執行 CREATE SERVICE 陳述式的使用者必須有佇列及所有指定合約的 REFERENCES 權限。
服務的 REFERENCES 權限,會預設給服務的擁有者、db_ddladmin 或 db_owner 固定資料庫角色的成員,以及系統管理員 (sysadmin) 固定伺服器角色的成員。服務的 SEND 權限,預設為服務的擁有者、db_owner 固定資料庫角色的成員,以及系統管理員 (sysadmin) 固定伺服器角色的成員。
服務不能是暫存物件。您可以使用開頭是 # 的服務名稱,但它們是永久物件。
A. 建立含有一份合約的服務
下列範例會在 dbo 結構描述中的 ExpenseQueue 佇列上建立 //Adventure-Works.com/Expenses 服務。以這項服務為目標的對話必須遵照 //Adventure-Works.com/Expenses/ExpenseSubmission 合約。
CREATE SERVICE [//Adventure-Works.com/Expenses]
ON QUEUE [dbo].[ExpenseQueue]
([//Adventure-Works.com/Expenses/ExpenseSubmission]) ;
B. 建立含有多份合約的服務
下列範例會在 ExpenseQueue 佇列上建立 //Adventure-Works.com/Expenses 服務。以這項服務為目標的對話必須遵照 //Adventure-Works.com/Expenses/ExpenseSubmission 合約或 //Adventure-Works.com/Expenses/ExpenseProcessing 合約。
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue
([//Adventure-Works.com/Expenses/ExpenseSubmission],
[//Adventure-Works.com/Expenses/ExpenseProcessing]) ;
C. 建立不含任何合約的服務
下列範例會在 ExpenseQueue 佇列上建立 //Adventure-Works.com/Expenses 服務。這項服務沒有合約資訊。因此,這項服務只能是交談的起始端。
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;

