Announcement

Collapse
No announcement yet.

keine Duplikate, aber NULL Werte zulassen

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

  • keine Duplikate, aber NULL Werte zulassen

    Hallo

    ich bin momentan dabei eine Datenbank zu erstellen und hab dabei folgendes Problem:
    Es gibt eine Spalte (Datentyp INTEGER), bei der keine Duplikate zugelassen werden sollen, gleichzeitig sollen aber NULL Werte möglich sein.
    Wenn ich nun die Spalte auf UNIQUE setze, hab ich das Problem mit den Duplikaten gelöst, aber es sind auch keine NULL Werte mehr möglich.

    Kann mir da jemand weiter helfen?

    Gruß,

    Steffi

  • #2
    Über einen Trigger sollte das möglich sein.

    Comment


    • #3
      [HIGHLIGHT="sql"]
      CREATE Schema TEST;
      GO
      CREATE TABLE TEST.TestTable
      (UIC INT)
      ;
      GO
      SET QUOTED_IDENTIFIER ON;
      SET ANSI_NULLS ON;
      GO
      CREATE VIEW Test.UIC WITH SCHEMABINDING AS
      SELECT UiC FROM TEST.TestTable WHERE UIC IS NOT NULL
      ;
      GO
      SET ANSI_PADDING ON;
      SET ANSI_WARNINGS ON;
      SET ARITHABORT ON;
      SET CONCAT_NULL_YIELDS_NULL ON;
      SET NUMERIC_ROUNDABORT OFF;
      GO
      CREATE UNIQUE CLUSTERED INDEX UQ_TEST_UIC ON TEST.UIC (UIC)
      GO

      INSERT INTO TEST.TestTable VALUES (1)
      GO
      INSERT INTO TEST.TestTable SELECT MAX(UIC) + 1 FROM TEST.TestTable;
      INSERT INTO TEST.TestTable VALUES (NULL)
      GO 11

      Select * FROM TEST.TestTable
      --geht net
      INSERT INTO TEST.TestTable VALUES (1)


      -Aufräumen
      DROP INDEX UQ_TEST_UIC ON TEST.UIC
      DROP VIEW TEST.UIC
      DROP TABLE TEST.TestTable
      DROP Schema TEST
      [/HIGHLIGHT]
      Zuletzt editiert von ebis; 09.07.2008, 21:17.

      Comment


      • #4
        @ebis: Wenn ich das richtig sehe, kann man mit deiner Lösung trotzdem nur einen NULL-Wert einfügen, oder? Ein zweiter NULL-Wert geht nicht.

        Gruß,
        Martin

        Comment


        • #5
          Guckst du hier
          http://www.sql-server-performance.co...e_null_p1.aspx

          Comment


          • #6
            Originally posted by Schupfnudel View Post
            @ebis: Wenn ich das richtig sehe, kann man mit deiner Lösung trotzdem nur einen NULL-Wert einfügen, oder? Ein zweiter NULL-Wert geht nicht.

            Gruß,
            Martin
            Probiers doch aus,

            Data set geibe die Zahlen 1- 12 und 11 mal die NULL zurück

            Das einfügen einer 2ten geht nicht mehr

            Comment


            • #7
              Originally posted by ebis View Post
              Probiers doch aus,

              Data set geibe die Zahlen 1- 12 und 11 mal die NULL zurück

              Das einfügen einer 2ten geht nicht mehr
              Also ist es nicht das, was Hirbelhasi sucht.

              Gruß,
              Martin

              Comment


              • #8
                aber sicher:
                Select * FROM TEST.TestTable
                liefert das
                Code:
                UIC
                -----------
                1
                2
                NULL
                3
                NULL
                4
                NULL
                5
                NULL
                6
                NULL
                7
                NULL
                8
                NULL
                9
                NULL
                10
                NULL
                11
                NULL
                12
                NULL
                (23 Zeile(n) betroffen)
                und ein wiederholtes Insert von 1 also:
                Code:
                INSERT INTO TEST.TestTable VALUES (1)
                liefert das
                Meldung 2601, Ebene 14, Status 1, Zeile 1
                Eine Zeile mit doppeltem Schlüssel kann in das 'TEST.UIC'-Objekt mit dem eindeutigen 'UQ_TEST_UIC'-Index nicht eingefügt werden.
                Die Anweisung wurde beendet.
                Zuletzt editiert von ebis; 18.02.2008, 11:45.

                Comment


                • #9
                  Dann habe ich das:
                  Originally posted by ebis
                  Das einfügen einer 2ten geht nicht mehr
                  falsch verstanden, sorry.

                  Gruß,
                  Martin

                  Comment

                  Working...
                  X