Je ne peux pas pour la vie de moi trouver quelque chose qui se rapporte au scénario que je suis po Et pour préface, je suis relativement nouveau pour les déclencheurs SQL CLR en général. Le scénario dans lequel je suis a un ensemble déclencheur CLR que j'ai créé dans mon SQL Server, où le code .NET lui-même fait une logique métier basée sur un enregistrement inséré ou mis à jour dans une table de base de données unique. Essentiellement, le code .NET extrait ces données de la table pour faire son travail, puis met à jour la même table.SQLServer CLR Déclencheur
Dans l'ensemble, j'ai ce travail très bien, tant que le SQL Server et l'application avec le code .NET en question réside sur la même machine. J'ai mis en place un environnement de développement pour nos clients du monde réel avec un serveur SQL résidant sur une machine, et l'application qui utilise le serveur SQL sur une machine différente, essayant d'imiter l'environnement distribué. Cependant, lorsque le déclencheur se déclenche dans SQL Server, comment l'application utilise-t-elle ce déclencheur lorsqu'elle se trouve sur une autre machine?
Voici ce que je pense savoir, ou plutôt des questions pour que je vérifie que j'y pense correctement.
Nos clients utilisent un environnement distribué dans lequel le serveur SQL utilisé par une ou plusieurs de nos applications peut utiliser des machines distantes. (Je sais déjà à propos de la famine sur les déclencheurs qui prennent trop de temps, et je l'ai manipulé). Un déclencheur CLR doit-il être utilisé sur un serveur 'spécifique' ou (pour un projet SQL Server) peut-il être déterminé dynamiquement?
Le SqlContext connaît-il la relation contextuelle avec la machine SQL Server? Ou est-ce déterminé dans le fichier de projet VS et indiqué «spécifiquement»? Peut-il être changé ou est-ce que CREATE ASSEMBLY garde toujours la valeur définie en fonction de la compilation avec laquelle elle est créée?
Je sais que le déclencheur est créé dans SQL Server et que la même référence de déclencheur est définie dans le code .NET ([SqlTrigger (Name = "aTrigger", etc ...) En d'autres termes, comment l'application distante sait qu'un déclencheur configuré dans SQL Server a été déclenché? SqlContext sait-elle seulement qu'un déclencheur a été déclenché si l'application elle-même appelle SQL Server? Si oui, que se passe-t-il lorsqu'une insertion/mise à jour se produit dans SQL Management Studio ?
Ok, assez avec les questions, je pourrais continuer longtemps avec eux, alors voyons si quelque chose a du sens pour quelqu'un d'abord.Je pourrais être dans la tête avec ce genre de choses.Merci pour tous les conseils donnés
Quel genre de logique métier votre déclencheur fait-il dans le code .NET qui ne pourrait pas être fait en T-SQL? –
Il appelle dans un morceau de notre code .NET qui appelle lui-même dans un service WCF. En raison de l'appel WCF, je ne peux rien faire dans T-SQL, au moins autant que mes connaissances limitées et google m'ont dit. Dans tous les cas, cette partie a été testée avec SQL Server et n'est pas en cause ici. Maintenant, il est juste de comprendre comment détecter qu'un déclencheur s'est déclenché. – user3558059
Le déclencheur pourrait enregistrer quelque chose, quelque part, et quelque chose d'autre pourrait surveiller cela quelque part pour les changements. Cette table pourrait avoir un déclencheur normal, par exemple, ou des notifications de requête, ou le déclencheur pourrait utiliser le service broker, etc. –