2015-04-02 3 views
0

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

+0

Quel genre de logique métier votre déclencheur fait-il dans le code .NET qui ne pourrait pas être fait en T-SQL? –

+0

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

+0

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. –

Répondre

0

J'étais capable de g et ce travail sans le courtier de service. Parce que ma compréhension du fonctionnement des déclencheurs CLR était plutôt limitée, je ne me suis pas rendu compte que les assemblées SQL que j'avais créées étaient celles qui fonctionneraient réellement, grâce à la journalisation, j'ai pu déterminer que je pensais à cela de manière erronée. Une fois que j'ai compris ce concept, les choses que je m'attendais à être là (en supposant qu'il fonctionnait dans mon code .NET et non en tant qu'assemblage SQL) ne l'étaient pas, donc j'ai juste dû l'aborder différemment. Une fois que j'ai travaillé sur les détails pour aligner les choses dans le contexte du SQL exécutant les assemblages, tout s'est mis en place et a explosé, ça a marché. Considérez ce sujet comme fermé. Merci encore une fois pour l'aide, c'était apprécié.