Sto creando una nuova tabella in Microsoft SQL Server 2000 scrivendo il codice anziché utilizzare la GUI, sto cercando di imparare come farlo "in modo manuale".Dichiarazione di un vincolo predefinito durante la creazione di una tabella
Questo è il codice che sto effettivamente usando, e funziona benissimo:
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, chiave esterna e verificare i vincoli sul proprio perché in questo modo posso definire un nome per li, altrimenti dichiararli in linea renderebbe SQL Server generare un nome casuale, e non mi piace "mi piace".
Il problema è sorto quando ho cercato di dichiarare il vincolo valore predefinito: guardando le informazioni su internet e come Microsoft SLQ Server Management Studio crea, ho capito che può essere creato sia in linea e sul proprio:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
o
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
il metodo in linea funziona bene, ma genera come al solito un nome casuale per il constaint, il metodo autonomo genera un errore, dicendo Incorrect syntax near 'FOR'.
.
Inoltre, se creo tavolo e poi ALTER
esso, il comando opere:
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 a perdita qui, è quello che sto cercando di fare non possibile, o sto facendo qualcosa di sbagliato?
Edit:
David M ha mostrato come aggiungere un vincolo predefinito di nome utilizzando la sintassi inline, sto ancora cercando di capire se la sola sintassi di supporto è completamente sbagliato o è colpa mia.
Sono d'accordo con la modifica. La risposta di David M non riguarda come aggiungere un vincolo tramite una dichiarazione di vincolo standalone, ma poiché BOL non ha alcun esempio in cui è possibile nominare il vincolo predefinito * tranne * tramite il modo in cui David M ha dimostrato, penso che sia sicuro presupporre che SQL Server (in modo incoerente) non supporti questa sintassi. –
Vedere anche: [Sintassi non corretta vicino a 'per' SQL Server] (https://stackoverflow.com/questions/42440431/) – paulsm4