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 ALTER
essa, 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.