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