válida valor una tipos tener tabla restricciones referencial referencia que puede nombres integridad hace externa datos columna clave campo alterar agregar tsql sql-server-2000 default constraints

tsql - valor - tipos de restricciones en base de datos



Declarar una restricción predeterminada al crear una tabla (1)

Estoy creando una nueva tabla en Microsoft SQL Server 2000 escribiendo el código en lugar de usar la GUI, estoy intentando aprender a hacerlo "de forma manual".

Este es el código que estoy usando y funciona 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()) )

He especificado la clave principal, la clave externa y las restricciones de verificación por sí mismas porque de esta manera puedo definir un nombre para ellas, de lo contrario, declararlas en línea haría que SQL Server generara un nombre aleatorio, y no me gusta.

El problema surgió cuando intenté declarar la restricción de valor por defecto: mirando las informaciones en Internet y cómo Microsoft SLQ Server Management Studio lo crea, entendí que se puede crear tanto en línea como solo:

"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()

o

CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"

El método en línea funciona bien, pero genera como siempre un nombre aleatorio para la constancia, el método independiente arroja un error, diciendo Incorrect syntax near ''FOR''. .

Además, si creo la tabla y luego la ALTER , el comando funciona:

ALTER TABLE "attachments" ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"


Como referencia, aquí está el código completo que estoy tratando de ejecutar:

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" )



Estoy totalmente perdido aquí, ¿no es posible lo que estoy tratando de hacer, o estoy haciendo algo mal?


Editar:

David M mostró cómo agregar una restricción predeterminada nombrada usando la sintaxis en línea, todavía estoy buscando entender si la sintaxis independiente es completamente incorrecta o si es mi culpa.


Hazlo en línea con la creación de la columna:

[load_date] SMALLDATETIME NOT NULL CONSTRAINT [df_load_date] DEFAULT GETDATE()

He usado corchetes en lugar de comillas, ya que muchos lectores no trabajarán con QUOTED_IDENTIFIERS en forma predeterminada.