sql >> Databasteknik >  >> RDS >> PostgreSQL

NOT NULL-begränsning över en uppsättning kolumner

@Igor har helt rätt och ett par OR 'ed expression är snabba och enkla.

För en lång lista med kolumner (a , b , c , d , e , f , g i exemplet) är detta kortare och lika snabbt:

CHECK (NOT (a,b,c,d,e,f,g) IS NULL)

db<>spela här
Gammal SQL-fiol.

Hur fungerar det?

En mer utförlig form av ovanstående skulle vara:

CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)

ROW är redundant syntax här.

Testar en ROW uttryck med IS NULL endast rapporterar TRUE om varje kolumn är NULL - vilket råkar vara precis vad vi vill utesluta.

Det är inte möjligt att helt enkelt vända detta uttryck med (a,b,c,d,e,f,g) IS NOT NULL , eftersom det skulle testa att varje kolumn IS NOT NULL . Negera i stället hela uttrycket med NOT . Voilá.

Mer information i manualen här och här.

Ett uttryck av formen:

CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)

skulle uppnå samma, mindre elegant och med en stor begränsning:fungerar bara för kolumner med matchande datatyp , medan kontrollen på en ROW uttryck fungerar med alla kolumner.



  1. Ta bort en enskild post från Entity Framework?

  2. En introduktion till SQL-index

  3. Skapa en SQL Server-databas med SQLOPS

  4. datetime2 vs smalldatetime i SQL Server:Vad är skillnaden?