Sto creando una nuova tabella in Microsoft SQL Server 2000 scrivendo il codice invece di usare la GUI, sto cercando di imparare come farlo "in modo manuale".
Questo è il codice che sto effettivamente utilizzando e funziona bene:
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE())
)
Ho specificato la chiave primaria, la chiave esterna e i vincoli di controllo da soli perché in questo modo posso definire un nome per loro, altrimenti dichiararli inline farebbe generare a SQL Server un nome casuale, e non mi "piace".
Il problema è sorto quando ho provato a dichiarare il vincolo del valore di default: guardando le informazioni su internet e come le crea Microsoft SLQ Server Management Studio, ho capito che può essere creato sia inline che da solo:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
o
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Il metodo inline funziona bene, ma come al solito genera un nome casuale per il constaint, il metodo stand alone genera un errore, dicendo Incorrect syntax near 'FOR'..
Inoltre, se creo la tabella e poi ALTERessa, il comando funziona:
ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Come riferimento, ecco il codice completo che sto cercando di eseguire:
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE()),
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
)
Sono totalmente in perdita qui, quello che sto cercando di fare non è possibile o sto facendo qualcosa di sbagliato?
Modificare:
David M ha mostrato come aggiungere un vincolo predefinito con nome utilizzando la sintassi inline, sto ancora cercando di capire se la sintassi stand alone è completamente sbagliata o è colpa mia.