sql >> Database teknologi >  >> RDS >> Sqlserver

Unik begrænsning på to felter, og deres modsatte

To løsninger, begge i virkeligheden om at ændre problemet til en lettere. Jeg foretrækker normalt T1 løsning, hvis det er acceptabelt at påtvinge forbrugerne en ændring:

create table dbo.T1 (
    Lft int not null,
    Rgt int not null,
    constraint CK_T1 CHECK (Lft < Rgt),
    constraint UQ_T1 UNIQUE (Lft,Rgt)
)
go
create table dbo.T2 (
    Lft int not null,
    Rgt int not null
)
go
create view dbo.T2_DRI
with schemabinding
as
    select
        CASE WHEN Lft<Rgt THEN Lft ELSE Rgt END as Lft,
        CASE WHEN Lft<Rgt THEN Rgt ELSE Lft END as Rgt
    from dbo.T2
go
create unique clustered index IX_T2_DRI on dbo.T2_DRI(Lft,Rgt)
go

I begge tilfælde hverken T1 heller ikke T2 kan indeholde duplikerede værdier i Lft,Rgt par.



  1. Brug SET TEXTSIZE til at begrænse de data, der returneres for hver række i SQL Server

  2. SQL Hent hele rækken baseret på minimumværdien af ​​den beregnede kolonne

  3. Installation af Ubuntu 18.04 til SQL Server 2019 på virtuel maskine ved hjælp af VMware Workstation

  4. Afrunding af decimal i sql-server