Frank (no reg): Trigger SQL Server 2000

Beitrag lesen

Hi,

... nur das deine Vereinfachung eher zu einer Totalverklärung geführt hat

Bilden wir doch mal ein Beispiel ab:

[t] beinhaltet ca. 500 Datensätze
in ASP:    UPDATE [t] SET [spalte1] = 'Wert'

  • alle 500 Records in [t] bekommen in [spalte1] den Wert 'Wert'
  • dein UpdateTrigger wird einmal gefeuert, die Updateprüfung auf [spalte1] bringt das Trigger SQL Statement zur Ausführung
  • [inserted] beinhaltet 500 Datensätze
  • dein UPDATE [v] SET [spalte2] = (SELECT TOP 1 [spalte1] from [inserted]) WHERE ...
      setzt alle Datensätze in [v].[spalte2] auf den obersten (weil TOP x bedingt eine Sortierung) Wert aus der Liste der 500 upgedateten Datensätze in [inserted], die einer bestimmten Bedingung entsprechen
  • von deiner Beschreibung gehe ich mal davon aus, dass du auf einen Eintrag in [inserted] filterst, also (SELECT TOP 1 [spalteX] FROM [inserted])
  • lässt du das TOP 1 weg, würde SELECT bis zum Ende von [inserted] lesen (imho ... das würde ich jetzt nicht beschreien wollen)
  • das Ergebnis, dass du beschreibst, ist klar. Du führst ja das UPDATE nur _1x_ für einen (Bedingung) Datensatz in [v] aus, möchtest aber, dass sich [v] bei allen mit [t] verwandten, geänderten Datensätzen ändert?

Und genau dafür gibt es den CURSOR, den man dann im Trigger verwenden sollte. Du selektierst dann von [inserted] genau 2 Spalten, einmal deine [spalte1] und dann die Spalte, welche die Verbindung zu [v] ist. (Von mir aus auch weitere Spalten aus [inserted], je nachdem was du für das Update-Statement brauchst.)

Zur Definition von Triggern siehe SQL BOL (SQL Server Books Online) = SQL Online Hilfe :-)

Ciao, als denn.
Frank