97 votes

Déclarer une contrainte par défaut lors de la création d'une table

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.

173voto

David M Points 45808

Faites-le en ligne avec la création de colonne:

 "load_date" SMALLDATETIME NOT NULL
        CONSTRAINT "df_load_date" DEFAULT GETDATE()
 

-11voto

Monu Points 1
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT ‘Noida'
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X