CREATE SERVICE (Transact-SQL)
S’applique à : SQL Server Azure SQL Managed Instance
Crée un nouveau service. Un service Service Broker est un nom pour une tâche ou un ensemble de tâches spécifiques. Service Broker utilise le nom du service pour acheminer les messages, les remettre à la file d'attente appropriée dans une base de données et appliquer le contrat pour une conversation.
Conventions de la syntaxe Transact-SQL
Syntaxe
CREATE SERVICE service_name
[ AUTHORIZATION owner_name ]
ON QUEUE [ schema_name. ]queue_name
[ ( contract_name | [DEFAULT][ ,...n ] ) ]
[ ; ]
Arguments
service_name
Nom du service à créer. Un nouveau service est créé dans la base de données active et il appartient au principal spécifié dans la clause AUTHORIZATION. Les noms du serveur, de la base de données et du schéma ne peuvent pas être spécifiés. service_name doit être un sysname valide.
Notes
Ne créez pas de service qui utilise le mot clé ANY pour service_name. Quand vous spécifiez ANY
pour un nom de service dans CREATE BROKER PRIORITY
, la priorité est considérée pour tous les services. Elle n'est pas limitée à un service dont le nom est ANY.
AUTHORIZATION owner_name
Définit le propriétaire du service comme étant l'utilisateur ou le rôle de la base de données spécifié. Quand l’utilisateur actuel est dbo ou sa, l’argument owner_name peut être le nom de n’importe quel utilisateur ou rôle valide. Sinon, owner_name doit être le nom de l’utilisateur actuel, le nom d’un utilisateur pour lequel l’utilisateur actuel a l’autorisation IMPERSONATE ou le nom d’un rôle auquel appartient l’utilisateur actuel.
ON QUEUE [ schema_name. ] queue_name
Spécifie la file d'attente qui reçoit les messages pour le service. Cette file d'attente doit exister dans la même base de données que celle du service. Si aucun argument schema_name n’est fourni, le schéma est le schéma par défaut de l’utilisateur qui exécute l’instruction.
contract_name
Spécifie un contrat pour lequel ce service peut être une cible. Les programmes de service initient des conversations avec le service à l'aide des contrats spécifiés. Si aucun contrat n'est précisé, le service peut seulement initier des conversations.
[DEFAULT]
Indique que le service peut être une cible pour des conversations respectant le contrat DEFAULT. Dans le contexte de cette clause, DEFAULT n'est pas un mot clé et il doit être délimité comme un identificateur. Le contrat DEFAULT autorise les deux côtés de la conversation à envoyer des messages de type DEFAULT. Le type de message DEFAULT utilise la validation NONE.
Notes
Un service expose les fonctionnalités fournies par les contrats avec lesquels il est associé, pour qu'ils puissent être utilisés par d'autres services. L’instruction CREATE SERVICE
spécifie les contrats pour lesquels ce service est la cible. Un service est une cible exclusivement pour les conversations qui utilisent les contrats spécifiés par le service. Un service qui ne spécifie aucun contrat n'expose aucune fonctionnalité aux autres services.
Les conversations lancées à partir de ce service peuvent utiliser n'importe quel contrat. Vous créez un service sans spécifier de contrat lorsque le service initie seulement des conversations.
Lorsque Service Broker accepte une nouvelle conversation d'un service distant, le nom du service cible détermine la file d'attente où le répartiteur place les messages dans la conversation.
Autorisations
L’autorisation de création d’un service est accordée aux membres du rôle de base de données fixe db_ddladmin
ou db_owner
ou aux membres du rôle serveur fixe sysadmin
. L’utilisateur exécutant l’instruction CREATE SERVICE
doit disposer de l’autorisation REFERENCES
pour la file d’attente et tous les contrats spécifiés.
L’autorisation REFERENCES
pour un service est accordée par défaut au propriétaire du service, aux membres du rôle de base de données fixe db_ddladmin
ou db_owner
ou aux membres du rôle serveur fixe sysadmin
. Les autorisations SEND
pour un service sont accordées par défaut au propriétaire du service, aux membres du rôle de base de données fixe db_owner
ou aux membres du rôle serveur fixe sysadmin
.
Un service ne peut pas être un objet temporaire. Les noms de service commençant par # sont autorisés, mais ce sont des objets permanents.
Exemples
R. Création d'un service avec un contrat
L'exemple suivant crée le service //Adventure-Works.com/Expenses
dans la file d'attente ExpenseQueue
du schéma dbo
. Les dialogues qui ciblent ce service doivent respecter le contrat //Adventure-Works.com/Expenses/ExpenseSubmission
.
CREATE SERVICE [//Adventure-Works.com/Expenses]
ON QUEUE [dbo].[ExpenseQueue]
([//Adventure-Works.com/Expenses/ExpenseSubmission]) ;
B. Création d'un service avec plusieurs contrats
L'exemple suivant crée le service //Adventure-Works.com/Expenses
dans la file d'attente ExpenseQueue
. Les dialogues qui ciblent ce service doivent respecter le contrat //Adventure-Works.com/Expenses/ExpenseSubmission
ou le contrat //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. Création d'un service sans contrat
L’exemple suivant crée la file d’attente //Adventure-Works.com/Expenses on the ExpenseQueue
du service. Ce service ne possède pas d'informations de contrat. Par conséquent, il ne peut être que l'initiateur d'un dialogue.
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;
Voir aussi
ALTER SERVICE (Transact-SQL)
DROP SERVICE (Transact-SQL)
EVENTDATA (Transact-SQL)