Jump to content

Trigger instead of update - wie komme ich an die werte des Tabellenbefehls


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Recommended Posts

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

Link to post

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

Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...