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

Tilføj en SQL XOR-begrænsning mellem to nullable FK'er

En måde at opnå det på er blot at skrive ned, hvad "eksklusiv ELLER" faktisk betyder:

CHECK (
    (FK1 IS NOT NULL AND FK2 IS NULL)
    OR (FK1 IS NULL AND FK2 IS NOT NULL)
)

Men hvis du har mange FK'er, kan ovenstående metode hurtigt blive uhåndterlig, og i så fald kan du gøre sådan noget:

CHECK (
    1 = (
        (CASE WHEN FK1 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK2 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK3 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK4 IS NULL THEN 0 ELSE 1 END)
        ...
    )
)

BTW, der er legitime anvendelser af det mønster, for eksempel denne (omend ikke gældende for MS SQL Server på grund af manglen på udskudte begrænsninger). Om det er legitimt i netop dit tilfælde, kan jeg ikke vurdere ud fra de oplysninger, du har givet indtil videre.



  1. MySQL - VÆLG SOM I WHERE

  2. sqlplus fejl ved valg fra ekstern tabel:ORA-29913:fejl ved udførelse af ODCIEXTTABLEOPEN callout

  3. Hvorfor er denne INNER JOIN/ORDER BY mysql-forespørgsel så langsom?

  4. Fejl:mysqlnd kan ikke oprette forbindelse til MySQL 4.1+ ved hjælp af den gamle usikre godkendelse