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