Microsoft MVPs inside





 MCSEboard.de – IT Pro Forum zu Windows Server 2008 R2 / 2008 / 2003 & Windows 7 / Vista / XP
Registrieren Hilfe Regeln Benutzerliste Suchen Heutige Beiträge Alle Foren als gelesen markieren

MS SQL Server Forum


Alles zum Thema Microsoft SQL Server — Q & A zu Microsoft SQL Server 2000 / 2005 / 2008 Architektur, Konfiguration, Troubleshooting


Antwort
     
Themen-Optionen
Alt 07.12.2011, 22:59   #1
Newbie
 
Offline
Registriert seit: 09-2011
Beiträge: 2
2K8R2 - Trigger instead of update - wie komme ich an die werte des Tabellenbefehls

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.

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...
)
    Mit Zitat antworten
Alt 15.12.2011, 21:27   #2
Board Veteran
 
Offline
Registriert seit: 07-2005
Ort: Hamburg
Beiträge: 524
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
    Mit Zitat antworten
Antwort


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Trigger zur ID-Übergabe elsocko MS SQL Server Forum 1 20.10.2011 01:32
Update Trigger Gini MS SQL Server Forum 2 15.08.2011 14:39
SQL 2005 Trigger Update als neuer Datensatz bofc MS SQL Server Forum 2 06.08.2011 03:35
event trigger W2k Server pfeffis Windows Server Forum 5 12.10.2007 19:09
Insert Trigger Natascha Windows Server Forum 0 02.01.2007 14:37


Alle Zeitangaben in MEZ/CET. Es ist jetzt 23:26 Uhr. Seite generiert in 0,027 Sekunden.

- Unsere Partner -

Copyright © 2000 – 2012 MCSEboard.de

Sprung zum Seitenanfang