AngelOfEffekt 10 Geschrieben 7. Dezember 2011 Melden Teilen Geschrieben 7. Dezember 2011 Hi, ich habe einen Trigger, der auf insert und update reagiert. Wenn eine ID angegeben ist, soll diese gesucht werden und bei fund soll dieser datensatz geupdated werden. sonst gibts einen ganz neuen Datensatz mit der id. klappt bei insert, bei update nur teilweise. Und zwar dahingehend, dass (was zwar logisch, aber hinderlich ist) bei einer id, die noch nicht vorhanden ist, keine daten im Inserted stehen. Gibt es allgemein eine Möglichkeit, an die 'Roh'-Daten des Insert- oder Update-Befehls zu kommen? Hier mal kurz mein bsp-Code. tabelle testtabelle (id int, name char) create trigger trGamesInsteadInsertUpdate on testtabelle instead of insert, update as begin declare @new varchar(50) declare @old varchar(50) declare @id tinyint declare @count tinyint set @new = (select name from inserted); set @id = (select id from inserted); set @count = (select COUNT(*) from testtabelle where id = @id) if(@count > 0) begin update testtabelle set name = @new where id = @id set @old = (select name from deleted); end else begin insert into testtabelle values (@id, @new) end select @new, @old, @id end insert into testtabelle (id, name) values ( 0,N'neu' --Klappt update testtabelle set name = N'hehe' where id =N'0' --klappt auch update testtabelle set name = N'hehe' where id =N'0' --klappt nicht, da keine Änderung vollzogen worden wäre... ) Zitieren Link zu diesem Kommentar
hh2000 10 Geschrieben 15. Dezember 2011 Melden Teilen Geschrieben 15. Dezember 2011 Moin, arbeite immer mengenbasiert, daher streiche mal alle Variablen. Es kann keiner, einer, oder viele Sätze gleichzeitig eingefügt/updated werden, das ist immer zu berücksichtigen. z.B. (ID ist hier eindeutig, IDENTITY (Autowert)): Im INSERT Trigger: INSERT INTO testtabelle (name) SELECT name FROM inserted Im UPDATE Trigger: UPDATE testtabelle SET testtabelle.name = inserted.name, testtabelle.Altername = deleted.name FROM testtabelle INNER JOIN inserted ON testtabelle.id = inserted.id INNER JOIN deleted ON testtabelle.id = deleted.id Gruß Kai Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.