Announcement

Collapse
No announcement yet.

SQL Server 2000: Standartwert in Tabellenspalte

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL Server 2000: Standartwert in Tabellenspalte

    Hallo zusammen,
    ich benutze die Function „(getdate())“ als Standardwert für eine Tabellenspalte.
    Damit bekomme ich das aktuelle Datum beim speichern einer Tabellenzeile.

    Führe ich nun über diese Zeile ein Update bleibt die Zeit gleich.
    Wie bekomme ich es hin, dass sich auch beim Update die Zeit aktualisiert?

  • #2
    Hallo,

    der Standardwert wird nur verwendet, wenn dem Feld kein expliziter Wert beim Insert zugewiesen wird.
    D.h. wird beim Insert ein Wert vorgegeben, wird natürlich dieser und nicht der Standardwert verwendet.

    Wenn der Wert beim Update aktualisiert werden soll, kannst Du am einfachsten im Update Statement ebenfalls GetDate() verwenden.
    Ansonsten bliebe noch die Variante, den Wert in einem Update-Trigger zu aktualisieren.

    Gruß, Ola
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo O. Helper,
      ich lasse die Spalte aus einem DataGRidView per CommandBuilder und Update updaten. Den Standdartdwert getdate() habe ich nur in der Spalte im SQL-Server hinterlegt. Ich wollte die Datumsübernahme dem Server überlassen. Beim einfügen einer Spalte funktioniert das auch. Nur beim Update nicht.
      Hier mal nen bischen Code der Tabelle im SQL-Server:
      CREATE TABLE [dbo].[Personal] (
      [IDMa] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
      [NachName] [nvarchar] (50) COLLATE Latin1_General_CI_AS NOT NULL ,
      [VorName] [nvarchar] (50) COLLATE Latin1_General_CI_AS NOT NULL ,
      [PersonalNr] [nvarchar] (8) COLLATE Latin1_General_CI_AS NOT NULL ,
      [pDatum] [datetime] NULL ,
      [pUser] [nvarchar] (128) COLLATE Latin1_General_CI_AS NULL
      ) ON [PRIMARY]
      GO

      ALTER TABLE [dbo].[Personal] WITH NOCHECK ADD
      CONSTRAINT [PK_Personal] PRIMARY KEY CLUSTERED
      (
      [IDMa]
      ) ON [PRIMARY]
      GO

      ALTER TABLE [dbo].[Personal] ADD
      CONSTRAINT [DF_Personal_pDatum] DEFAULT (getdate()) FOR [pDatum],
      CONSTRAINT [DF_Personal_pUser] DEFAULT (host_name() + ' - ' + suser_sname()) FOR [pUser],
      CONSTRAINT [IX_Personal_Name_Vorname] UNIQUE NONCLUSTERED
      (
      [NachName],
      [VorName]
      ) ON [PRIMARY] ,
      CONSTRAINT [IX_Personal_No] UNIQUE NONCLUSTERED
      (
      [PersonalNr]
      ) ON [PRIMARY]
      GO

      Ich würde also die Variante mit dem Update-Trigger vorziehen...
      Kannst du mir nen Beispiel posten wie man so was macht...?

      Dank

      Comment


      • #4
        Hallo,

        wie Du Trigger unter MS SQL Server programmieren kannst, kann man gut im BOL nachlesen, dort gibt es auch div. Beispiele.

        Für Deinen Fall müsste der folgende Trigger funktionieren:

        CREATE TRIGGER TRU_Personal_DateUpdate ON [Personal] FOR UPDATE
        AS
        UPDATE [Personal]
        SET pDatum = GetDate()
        FROM [Personal] INNER JOIN inserted ON [Personal].IDMa = inserted.IDMa

        Davon ausgehend, das Du den PK IDMa nicht updated wirst, ist egal, ob Du "inserted" oder "deleted" verwendest.

        Gruß, Ola
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Danke..

          Comment

          Working...
          X