Je suis entrain de créer une nouvelle table dans Microsoft SQL server 2000 par l'écriture de code au lieu d'utiliser l'interface graphique, je suis en train d'apprendre comment le faire "manuellement".
C'est le code que j'suis en train d'utiliser, et il fonctionne très bien:
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())
)
J'ai spécifié la clé primaire, clé étrangère et de vérifier les contraintes sur leur propre parce que de cette façon je peux définir un nom pour eux, sinon les déclarant inline ferait SQL Server générer un nom aléatoire, et je ne suis pas "comme".
Le problème se pose lorsque j'ai essayé de déclarer la valeur par défaut de la contrainte: en regardant les informations sur l'internet et comment Microsoft SLQ Server Management Studio crée, j'ai compris qu'il peut être créé à la fois en ligne et sur son propre:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
ou
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Le inline méthode fonctionne très bien, mais il génère comme d'habitude un nom aléatoire pour le constaint, le stand alone méthode renvoie une erreur, en disant: Incorrect syntax near 'FOR'.
.
Aussi, si je créer la table et ensuite, ALTER
, la commande fonctionne:
ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Comme référence, voici le code complet, je suis en train d'exécuter:
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"
)
Je suis totalement à perte, ici, est ce que je suis en train de faire n'est pas possible, ou alors je fais quelque chose de mal?
Merci d'avance, Andrea.
Edit:
David M a montré comment ajouter un nom de contrainte par défaut à l'aide de la syntaxe inline, je suis toujours à la recherche de comprendre si le seul syntaxe est complètement faux ou c'est de ma faute.