Jump to content
Sign in to follow this  
AngelOfEffekt

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

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.   Restore formatting

  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.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...