SQL Server déclencheur de mise à jour ne fonctionne pas

Il y a une table de base de données qui a un déclencheur de mise à jour. Chaque fois qu'une colonne est mise à jour, une de ses colonnes est calculée automatiquement.

J'ai modifié le déclencheur et j'aimerais le faire fonctionner sur toutes les lignes de nouveau. Dans SQL Server Management Studio, si je choisis "Modifier" Top 200 "des Lignes" sur ma table, et de modifier l'une des lignes, le déclencheur de mise à jour fonctionne. Mais quand j'écris une requête comme:

UPDATE MyTable
SET SomeIrrelevantColumn = 0

le déclencheur ne fonctionne pas, la colonne qui est censé être calculé par le déclencheur reste le même.

Comment puis-je exécuter le déclencher manuellement sur toutes les lignes?

Edit: Voici le déclencheur:

USE [MY_DATABASE]
GO
/****** Object:  Trigger [dbo].[MY_TABLE_AUER]    Script Date: 04/24/2013 00:05:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[MY_TABLE_AUER] 
   ON  [dbo].[MY_TABLE] 
   AFTER UPDATE
AS 
DECLARE @UPD_COLUMN_A int,
        @INS_COLUMN_A int,
        @UPD_COLUMN_B int,
        @UPD_COLUMN_C varchar(255),
        @UPD_COLUMN_D varchar(255),
        @UPD_COLUMN_E int,
        @UPD_COLUMN_F datetime
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    SELECT @UPD_COLUMN_A = _Column_A,
           @UPD_COLUMN_B =_Column_B,
           @UPD_COLUMN_C = COLUMN_C,
           @UPD_COLUMN_D = [Column_D]
      FROM DELETED;
    IF @UPD_COLUMN_D not like '%SomeString%'
    BEGIN
      SELECT @INS_COLUMN_A = _Column_A
        FROM INSERTED;
      IF @UPD_COLUMN_A != @INS_COLUMN_A
      BEGIN
        SELECT @UPD_COLUMN_E = MAX([_Column_B]),
               @UPD_COLUMN_F = MAX([_Column_G])
          FROM MY_TABLE
         WHERE COLUMN_C = @UPD_COLUMN_C
           AND [Column_D] LIKE '%SomeString%';
        UPDATE MY_TABLE 
           SET COLUMN_E = @UPD_COLUMN_E,
               COLUMN_F = @UPD_COLUMN_F
         WHERE [_Column_B] = @UPD_COLUMN_B;
        UPDATE MY_TABLE 
           SET COLUMN_H = @UPD_COLUMN_B
         WHERE [_Column_B] = @UPD_COLUMN_E; 
      END
    END
END
  • Vous devrez montrer le code de déclencheur, sinon tout ce que nous pouvons faire est de deviner.
  • peut être il y a une erreur dans le code du déclencheur, vous pourriez peut-être poster?
  • Venez d'ajouter le code du déclencheur.
  • Votre détente est très répandue mais fausse hypothèse qu'il s'exécute une fois par ligne. Il ne le fait pas, il s'exécute une fois par action - de sorte que lorsque vous mettez à jour l'ensemble de la table, je parie que si vous regardez de plus près, vous verrez qu'une ligne a été mis à jour.
  • Je suis juste l'élaboration de l'interface et je n'ai pratiquement aucune expérience avec les bases de données ou SQL. Comment puis-je résoudre ce problème?
  • Vous pouvez apprendre à écrire du code SQL qui effectue des mises à jour sur le nombre de lignes à la fois au lieu d'une seule à la fois.
  • Je suppose que vous savez comment faire, mais n'ont aucun intérêt dans le partage de la ressource sur le sujet ou l'ajout d'une réponse à l'expliquer, suis-je la corriger?
  • Je ne pense pas qu'il y a plus de deux mille questions sur ce site web qui incluent des travaux de recherche originaux, tous les autres peuvent en quelque sorte être "Googlé". Je pourrais bien sûr aller sur et commencer la lecture sur SQL, et déclenche alors, et alors déclencheurs de mise à jour, et ainsi de suite. En fin de compte, j'ai pu avoir une connaissance complète sur les déclencheurs, ce qui serait bon bien sûr. Mais je voulais juste voir si quelqu'un pouvait me diriger dans la bonne direction, afin que je puisse continuer mon chemin plus rapide. Comme je ne suis pas le gestionnaire de base de données, je n'ai aucun intérêt dans l'apprentissage du SQL dans le détail.
  • En dehors de cela, à la fois les ressources dont vous avez fait moi au fièrement que vos résultats de Google ne sont pas faciles à trouver. Si je savais à propos de "mise à Jour en Fonction Join" ou "Multi-Ligne de Déclenchement de mise à Jour" des concepts, je ne serais probablement pas ici pour demander. "Avec tout le respect", écrit "il suffit d'aller l'apprendre" est juste d'être arrogant, pas utile.
  • toutes les questions doivent montrer un peu d'effort, ou comme vous l'appelez, de la recherche originale. L'officiel comment demander section de la FAQ dit: "Faites vos devoirs. Avez-vous bien cherché une réponse avant de poser votre question? Le partage de votre recherche permet à tout le monde. Dites-nous ce que vous avez trouvé et pourquoi il n'a pas à répondre à vos besoins. Cela démontre que vous avez pris le temps d'essayer de vous aider, il nous sauve de réitérer des réponses évidentes, et surtout, elle permet d'obtenir une plus pertinente et la réponse!" Je suis la suppression de mes autres commentaires.
  • apparemment, le problème est de décider de la définition de "montrer un peu d'effort". Moi en essayant de lancer ce déclencheur avec mon peu de connaissances de SQL et de l'essai de différentes façons, en essayant de voir la différence entre la mise à jour qu'une seule ligne et la mise à jour, le nombre de lignes n'était pas assez "montrant des efforts" pour vous. Encore une fois, je pourrais très bien aller et de commencer la lecture depuis le début, je suppose que c'était "mal" à supposer que quelqu'un ici serait seulement dire "hey, vous savez quoi, cette partie de votre requête est mauvaise pour moi, vérifier cela." Je souhaite que j'aie eu le temps d'apprendre tout en détail, mais je n'en ai pas.
  • J'ai le plus humblement présenter des excuses pour ne pas répondre à votre question de la façon dont vous vouliez. Je pensais vraiment que mon commentaire serait utile, en offrant une phrase de recherche tels que "sql de mise à jour à l'encontre de plusieurs lignes à la fois" pour vous conduire à une réponse. Les commentaires sont drive-by, rapide choses, je n'aurais jamais posté ce commentaire comme une réponse. L'effort que j'attendais, c'était pour vous de prendre mon astuce et de courir avec lui. Que personne n'a pris la peine d'expliquer en détail, dans une vraie réponse est bouleversant--je comprends que, comme quelqu'un qui a posé des questions ici vainement. Dans le même temps, considérer que je ne vous pointer dans la bonne direction.
  • à la fin j'ai résolu à l'aide d'indicateurs à partir d'une autre question que j'ai demandé aujourd'hui (stackoverflow.com/questions/16191581/...). J'apprécie tous les commentaires que les points de moi dans la bonne direction, et je ne suis certainement pas ici, attendre que les gens de résoudre tous mes problèmes pour moi (comme vous pouvez le voir sur toutes les questions que j'ai posées). Mais c'est un Q&Un site, et quand j'ai demander "Comment pouvez-vous écrire un déclencheur de mise à jour de SQL pour plusieurs lignes?", si vous dites "eh Bien, vous pouvez commencer par apprendre à écrire du code SQL qui fonctionne sur plusieurs lignes.", c'est juste impoli
  • En fin de compte, mon problème n'est pas quelqu'un qui essaie de me pointer dans la bonne direction, et il est triste de constater que vous êtes encore en train d'essayer d'agir comme je suis en train d'essayer d'obtenir rapidement une solution à mon problème ici, qui vous basez sur votre pensée que "je ne suis pas en essayant de le mettre aucun effort et je ne mérite pas d'obtenir quelque chose de plus que "juste aller l'apprendre'". Si vous pensez que votre ton de votre commentaire était tout à fait approprié, et ce exclusivement pour les aider, je certainement n'avez rien d'autre à en parler.
  • si vous n'avez pas envie d'apprendre le SQl dans le détail, vous êtes incompétent pour écrire des déclencheurs.
  • c'est en quelque sorte soufflé extrêmement hors de proportion. Tout d'abord, si j'ai été assez compétent pour être des déclencheurs d'écriture, je ne serais pas venu ici en premier lieu, je souhaite résoudre mon problème de la manière dont je le fais pour beaucoup de beaucoup de choses chaque jour. La deuxième chose est, j'ai écrit le frontend pour cette base de données et je voulais essayer quelque chose de rapide, je voulais faire une petite modification dans le déclenchement de sorte que j'ai pu essayer une petite chose, je ne suis pas en train de devenir un administrateur de base de données. Troisièmement, même si je n'ai pratiquement aucune connaissance de SQL, comme vous pouvez le voir à partir de la réponse, j'ai en quelque sorte résolu et il fonctionne assez bien.

InformationsquelleAutor hattenn | 2013-04-23