PDA

View Full Version : SQL info su NOT NULL


skorpius
15-10-2003, 14:27
in una tabella, ho un campo cognome e un campo nome.
Se fosse obbligatorio inserirli entrambi, si metterebbe NOT NULL ad entrambi questi campi.
Ma io ho bisogno che l'utente inserisca ALMENO 1 dei 2 campi.
Come si esprime questo vincolo in SQL????
Grazie a tutti

cn73
15-10-2003, 14:58
In fase di creazione della tabella e definizione dei campi? Non penso proprio si possa fare... Lo controllerai via codice.

cisky
16-10-2003, 12:59
Al massimo puoi creare un TRIGGER di UPDATE (PL/SQL) che verifichi la tua condizione...

... Non ne ho mai creati, ma credo che si possa fare in questo modo...

GO

CREATE TRIGGER Prova
ON Tabella
FOR INSERT, UPDATE
AS
RAISERROR ('Devi specificare almeno uno dei 2 campi!', 16, 1)
ROLLBACK TRANSACTION
IF
Campo1 is Null AND Campo2 is Null
GO

cionci
16-10-2003, 14:13
skorpius: ma per quale DBMS ti serve ?

skorpius
17-10-2003, 09:48
è una tabella che fa riferimento ad una anagrafica di clienti...
In una tabella aziende ho ragione sociale, indirizzo ecc..
ognuna di queste può avere 0,1,n contatti (persone che ci lavorano) ciascuna con suo n. di tel. diretto, cellulare, email ecc..
solo che i dipendenti (che useranno questa appilcazione) quando chiedono con chi hanno parlato spesso hanno il cognome, altre volte il nome, quasi mai entrambi..tutto qui.

cionci
17-10-2003, 10:35
Sì, ma per quale DBMS ?!?!?! Access, MySQL Oracle, DB2 e chi + ne ha + ne metta... SQL non è uguale per tutti ;)

skorpius
18-10-2003, 06:29
hai ragione... è Mysql 4.0.15 std!

cionci
18-10-2003, 09:07
Quindi i trigger non ci sono ;)

cionci
18-10-2003, 09:09
Una soluzione molto semplice sarebbe quella di inserire Nome e Cognome nello stesso campo NOT NULL... Tanto bene o male non puoi ordinare neinte su quei campi...al amssimo puoi fare un ordinamento su entrambi i campi mai il risultato sarebbe equivalente a quello fatto su un unico campo...

Inoltre ti si semplificherebbe la ricerca...

skorpius
20-10-2003, 09:25
E' vero, Cionci, nel mio caso è proprio meglio fare come dici tu.:)

Ma cmq, in generale e a puro titolo di curiosità, SQL non consente quello che avevo pensato, allora...

cionci
20-10-2003, 09:45
Diciamo che MySQL ancora non consente quello... Oracle e tanti altri lo consentono...

Sinceramente non so se è consetito dall'ultimo standard SQL...