Announcement

Collapse
No announcement yet.

bit=1 in Kombination mit KundenID 1x erlauben mit 0 unendlich mal erl.

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

  • bit=1 in Kombination mit KundenID 1x erlauben mit 0 unendlich mal erl.

    hallo,
    kann ich einen Check auf einen bestimmten wert erlauben.

    Also ich möchte einen Baum in der Datenbank abbilden. Das System ist mandantenfähig. Nun möchte ich mir den Wurzeldatensatz markieren. Das hätte ich jetzt über ein bit-Feld gemacht. Das Bit-Feld wurzeldatensatz darf aber nur einmal bei einer KundenID true sein.

    Der false-Wert darf aber öfters vorkommen. kann ich das mit Unique Constraints abbilden oder muss ich das Prüfen auf die Programmoberfläche verlagern?

  • #2
    Ab SQL-Server 2008 mit gefilterten Indexen
    [HIGHLIGHT="SQL"]BEGIN TRANSACTION;
    CREATE TABLE Test (ID INT IDENTITY (1,1) PRIMARY KEY, Test BIT)
    CREATE UNIQUE INDEX UI_Test_Test ON dbo.Test (Test) WHERE Test = 1
    INSERT INTO Test (Test) SELECT 1 UNION ALL SELECT 0 UNION ALL SELECT 0
    SELECT * From dbo.Test
    INSERT INTO Test (Test) SELECT 1 -- Geht nicht
    ROLLBACK;[/HIGHLIGHT]

    Comment


    • #3
      Mit Check-Constaint z.B. so
      [HIGHLIGHT="SQL"]BEGIN TRANSACTION;
      CREATE TABLE Test (ID INT IDENTITY (1,1) PRIMARY KEY, Test BIT)
      GO
      CREATE FUNCTION CkRoot
      () RETURNS TINYINT
      AS
      BEGIN
      DECLARE @Result TINYINT;
      SELECT @Result = (SELECT Count (Test) FROM DBO.Test WHERE Test = 1)
      RETURN @Result
      END;
      GO
      ALTER TABLE Dbo.Test
      Add CONSTRAINT Ck_Test CHECK (Dbo.CkRoot() < 2)

      INSERT INTO Test (Test) SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 0
      SELECT * From dbo.Test
      INSERT INTO Test (Test) SELECT 1 -- Geht nicht
      ROLLBACK;[/HIGHLIGHT]

      Comment

      Working...
      X