Time-Stamp SQL 2005 Express

04/11/2008 - 17:41 von Markus Renezeder | Report spam
Hallo Leute,

ich hab zwar einiges gefunden, aber leider nichts was mir so wirklich weiter
hilft.

Ich habe hier eine Applikation die mit einem SQL-Server 2005 Express
arbeitet. Leider hab ich keinen Einfluss auf die Applikation selbst, aber
ich soll den SQL-Server dazu bringen, dass er einen TimeStamp in der Tabelle
speichert.

Ich hab jetzt versucht ein Feld mit einem Default-Wert zu erstellen.

CREATE Table Hugo (RepTs DATETIME DEFAULT (GETDATE()), ID INT)

Das haut auch wunderbar hin, aber natürlich nur, wenn ein neuer Datensatz in
die Tabelle geschrieben wird. Bei einem Update wird der TimeStamp leider
(natürlich) nicht aktualisiert. Kann mir da jemand weiterhelfen?

Danke, Markus
 

Lesen sie die antworten

#1 Olaf Pietsch
04/11/2008 - 18:14 | Warnen spam
Hallo Markus,

"Markus Renezeder" schrieb im Newsbeitrag
news:%

Ich habe hier eine Applikation die mit einem SQL-Server 2005 Express
arbeitet. Leider hab ich keinen Einfluss auf die Applikation selbst, aber
ich soll den SQL-Server dazu bringen, dass er einen TimeStamp in der
Tabelle speichert.

Ich hab jetzt versucht ein Feld mit einem Default-Wert zu erstellen.

CREATE Table Hugo (RepTs DATETIME DEFAULT (GETDATE()), ID INT)

Das haut auch wunderbar hin, aber natürlich nur, wenn ein neuer Datensatz
in die Tabelle geschrieben wird. Bei einem Update wird der TimeStamp
leider (natürlich) nicht aktualisiert. Kann mir da jemand weiterhelfen?



Du musst dafür einen Trigger auf die Tabelle erstellen:

CREATE TRIGGER (Transact-SQL)
http://msdn.microsoft.com/de-de/lib...89799.aspx

ungefàhr so müsste der Trigger in Deinem Fall aussehen:

USE DeineDB;
GO

IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
object_id(N'dbo.Hugo_TR_ins_upd') AND objectproperty(object_id,
N'IsTrigger') = 1)
BEGIN
DROP TRIGGER dbo.Hugo_TR_ins_upd;
PRINT 'DROP TRIGGER dbo.Hugo_TR_ins_upd';
END
GO

CREATE TRIGGER dbo.Hugo_TR_ins_upd
FOR INSERT, UPDATE
AS
BEGIN
IF @@ROWCOUNT = 0 RETURN;
SET NOCOUNT ON;

UPDATE h
SET RepTs = getdate()
FROM Hugo AS h
INNER JOIN inserted AS ins ON ins.ID = h.ID;

RETURN
GO

"inserted" ist eine "pseudo"-Tabelle die zur Laufzeit des Triggers die
gleiche Struktur hat, wie die Tabelle für die der Trigger definiert ist. In
inserted sind die Datensàtze, die eingefügt bzw geàndert wurden (mit den
neuen Werten).



Gruß Olaf
Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)
Blog (http://www.sqlpass.de/PASSUserBlogs...x?BlogID=3)
Regionalgruppe Köln/Bonn/Düsseldorf
(http://www.sqlpass.de/Regionalgrupp...fault.aspx)

Ähnliche fragen