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 la manera manual".Declarar una restricción predeterminada al crear una tabla
Este es el código que estoy utilizando realmente, 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 primaria, clave externa y las restricciones de comprobación por su cuenta, porque de esta manera puedo definir un nombre para ellos, de lo contrario, declararlos en línea haría que SQL Server generara un nombre aleatorio, y no me gusta.
El problema surgió cuando trataba de declarar el valor por defecto restricción: mirando las informaciones en Internet y cómo Microsoft SLQ Server Management Studio crea, entendí que se puede crear tanto en línea como en su propia:
"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 como de costumbre genera un nombre aleatorio para el constaint, el método independiente genera un error, diciendo Incorrect syntax near 'FOR'.
.
Además, si se crea la tabla y luego ALTER
él, 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 en la pérdida aquí, es lo que estoy tratando de hacer que no sea posible, o estoy haciendo algo mal?
Editar:
David M mostró cómo agregar una restricción predeterminada llamada utilizando la sintaxis de línea, todavía estoy buscando entender si la sola sintaxis soporte está completamente equivocado o es mi culpa.
Acepto la edición. La respuesta de David M no cubre cómo agregar una restricción a través de una declaración de restricción independiente, pero como BOL no tiene ningún ejemplo donde se pueda nombrar la restricción predeterminada * excepto * por la forma en que David M lo demostró, creo que es seguro supongamos que SQL Server (de manera incoherente) no admite esta sintaxis. –
Vea también: [Sintaxis incorrecta cerca de 'para' SQL Server] (https://stackoverflow.com/questions/42440431/) – paulsm4