88 messaggi dal 19 ottobre 2012
Ciao,
non trovo su nessun forum la soluzione al mio problema e spero che mi possiate dare una mano.
Ho una tabella e devo aggiungere una constraint per la quale due colonne non siano contemporaneamente null
Credo che la soluzione migliore sia usare la funzione coalesce ma non riesco ad inserirla nella constraint. Ho scritto questo:

alter MiaTabella add constraint NomeConstraint check (coalesce(colonna1,colonna2) is not null)

e altre soluzioni simili ma mi esce sempre errore

Grazie in anticipo per l'aiuto

eusevio72
1.976 messaggi dal 27 luglio 2005
Contributi
salve Giorgio,
io andrei su una soluzione piu' semplice,
nuova tabella (
  Id int NOT NULL,
  a int NULL,
  b int NULL
  );
GO
ALTER TABLE dbo.t
  ADD CONSTRAINT chk_t_A$B_not_null
    CHECK (
        (
          (CASE WHEN a IS NULL THEN 0 ELSE 1 END) 
          + (CASE WHEN b IS NULL THEN 0 ELSE 1 END)
        ) >= 1
      );
    

GO
DECLARE @Id int = 1, @a int = 1, @b int = 1;
SELECT @Id Id, @a a, @b b;
INSERT INTO dbo.t VALUES ( @id, @a, @b);

SELECT @Id = 2, @a = 2, @b = NULL;
SELECT @Id Id, @a a, @b b;
INSERT INTO dbo.t VALUES ( @id, @a, @b);

SELECT @Id = 3, @a = NULL, @b = 3;
SELECT @Id Id, @a a, @b b;
INSERT INTO dbo.t VALUES ( @id, @a, @b);

GO
DECLARE @Id int = 4, @a int = NULL, @b int = NULL;
SELECT @Id Id, @a a, @b b;
INSERT INTO dbo.t VALUES ( @id, @a, @b);

GO

elimina tabella dbo.t;
--<-----------
Id          a           b
----------- ----------- -----------
1           1           1

Id          a           b
----------- ----------- -----------
2           2           NULL

Id          a           b
----------- ----------- -----------
3           NULL        3

Id          a           b
----------- ----------- -----------
4           NULL        NULL

Msg 547, Level 16, State 0, Line 37
The INSERT statement conflicted with the CHECK constraint "chk_t_A$B_not_null". The conflict occurred in database "tempdb", table "dbo.t".
The statement has been terminated.



salutoni romagnoli
Modificato da Andrea Montanari il 12 marzo 2021 21:03 -

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
88 messaggi dal 19 ottobre 2012
Grazie Andrea. Sempre preziosi i tuoi consigli. Ormai sei il mio mentore per SQL
Un saluto

Giorgio

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.