Announcement

Collapse
No announcement yet.

Datetime Felder auf NULL setzten

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

  • Datetime Felder auf NULL setzten

    Hallo,

    ich habe eine größere Datenbank umgestellt auf SQL-Server. Meine Anwendungsprogramme sind alle in Delphi geschrieben. Die Programme, die ich bis jetzt für SQL-Server modifiziert habe laufen auch gut. Nun ist mir aufgefallen, dass bei Datetimefeldern, wenn das zugehörige Eingabefeld vom Benutzer leergelassen wird, der Default-Wert '1.1.1900' gesetzt wird. Ich möchte in diesem Fall aber NULL in den Feldern stehen haben. Gibt es die Möglichkeit diesen Defaultwert datenbankübergreifend auf NULL zu setzen? Ich habe bisher nichts dazu gefunden. (Natürlich könnte ich programmintern die entsprechenden Eingabefelder abfragen und explizit NULL reinschreiben; dazu habe ich aber keine Lust.)

    Gruß
    docendo discimus

  • #2
    Hallo frauwue,

    sicher, das da der 1.1.1900 als Default Wert hinterlegt ist? Wäre ungewöhnlich.
    Und das hier
    [highlight=sql]SELECT CONVERT(datetime, 0)[/highlight]
    liefert auch den 1.1.1900; nicht das irgendwo leere Werte in 0 gewandelt werden.

    Sonst kannst Du alle Felder mit Default Werten mit
    [highlight=Sql]SELECT OBJ.name, COL.name, DFC.definition
    FROM sys.columns AS COL
    INNER JOIN sys.objects AS OBJ
    ON COL.object_id = OBJ.object_id
    INNER JOIN sys.default_constraints AS DFC
    ON COL.default_object_id = DFC.object_id
    ORDER BY OBJ.name, COL.name[/highlight]
    ermitteln; Cursor drüber und per dynamischen Sql die Alter Anweisungen ausführen.
    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 Olaf,

      erstmal danke für die Antwort. Vielleicht habe ich mich falsch ausgedrückt. Aber Fakt ist, dass bei Eingabe von einem leeren String in ein Datumsfeld der '1.1.1900' geschrieben wird. Bei meiner vorherigen Datenbank (Informix) wurde NULL genommen. Ich habe mir auch eine Hilfstabelle angelegt mit einem Datumswert und habe explizit den Default Wert auf NULL gesetzt und dann eine leeren String eingespeichert. Da kommt dasselbe raus.
      Ich dachte man könnte das vielleicht für die ganze Datenbank irgendwo einstellen.

      Gruß
      docendo discimus

      Comment


      • #4
        Check doch mal was als Code beim Server ankommt (Tracing im Enterprice Manager).
        Ich tipp mal das hier was gesetzt wird.

        Comment


        • #5
          [highlight=SQL]SELECT CONVERT(datetime, '')[/highlight]
          Auch das liefert den 01.01.1900; nur NULL ist wirklich nichts.
          Das wird dann doch eher an Deiner Programmlogik liegen.
          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


          • #6
            Originally posted by frauwue View Post
            Aber Fakt ist, dass bei Eingabe von einem leeren String in ein Datumsfeld der '1.1.1900' geschrieben wird. Bei meiner vorherigen Datenbank (Informix) wurde NULL genommen. Ich habe mir auch eine Hilfstabelle angelegt mit einem Datumswert und habe explizit den Default Wert auf NULL gesetzt und dann eine leeren String eingespeichert. Da kommt dasselbe raus.
            Dummerweise tut SQl-Server '' (also SPACE(0)) immer ganz gerne implizit zu
            der Zahl 0 konvertieren, da hilft wohl nur den zu konvertierenden String in mit IFNULL (String, '') in NULL zu wandeln.

            Code:
            DECLARE  @Str NVARCHAR(20); SET @Str =''
            SELECT   CONVERT(DATETIME, '') AS NOTNULL
                  ,  CONVERT(datetime, NULLIF (@Str, '')) AS ISNULL
            Ich dachte man könnte das vielleicht für die ganze Datenbank irgendwo einstellen.
            Ist mir jedenfalls nicht bekannt...

            Comment


            • #7
              Danke an Euch alle für Eure Antworten.
              Ich sehe, ich werde mir wohl die Arbeit machen müssen, die Programme entsprechend zu modifizieren.
              docendo discimus

              Comment

              Working...
              X