Listado completo de tutoriales
47 - Restricción default |
La restricción "default" especifica un valor por defecto para un campo cuando no se inserta explícitamente en un comando "insert".
Anteriormente, para establecer un valor por defecto para un campo empleábamos la cláusula "default" al crear la tabla, por ejemplo:
create table libros( ... autor varchar(30) default 'Desconocido', ... );
Cada vez que establecíamos un valor por defecto para un campo de una tabla, SQL Server creaba automáticamente una restricción "default" para ese campo de esa tabla.
Dicha restricción, a la cual no le dábamos un nombre, recibía un nombre dado por SQL Server que consiste "DF" (por default), seguido del nombre de la tabla, el nombre del campo y letras y números aleatorios.
Podemos agregar una restricción "default" a una tabla existente con la sintaxis básica siguiente:
alter table NOMBRETABLA add constraint NOMBRECONSTRAINT default VALORPORDEFECTO for CAMPO;
En la sentencia siguiente agregamos una restricción "default" al campo autor de la tabla existente "libros", que almacena el valor "Desconocido" en dicho campo si no ingresamos un valor en un "insert":
alter table libros add constraint DF_libros_autor default 'Desconocido' for autor;
Por convención, cuando demos el nombre a las restricciones "default" emplearemos un formato similar al que le da SQL Server: "DF_NOMBRETABLA_NOMBRECAMPO".
Solamente se permite una restricción "default" por campo y no se puede emplear junto con la propiedad "identity". Una tabla puede tener varias restricciones "default" para sus distintos campos.
La restricción "default" acepta valores tomados de funciones del sistema, por ejemplo, podemos establecer que el valor por defecto de un campo de tipo datetime sea "getdate()".
Podemos ver información referente a las restriciones de una tabla con el procedimiento almacenado "sp_helpcontraint":
exec sp_helpconstraint libros;
aparecen varias columnas con la siguiente información:
- constraint_type: el tipo de restricción y sobre qué campo está establecida (DEFAULT on column autor), - constraint_name: el nombre de la restricción (DF_libros_autor), - delete_action y update_action: no tienen valores para este tipo de restricción. - status_enabled y status_for_replication: no tienen valores para este tipo de restricción. - constraint_keys: el valor por defecto (Desconocido).
Entonces, la restricción "default" especifica un valor por defecto para un campo cuando no se inserta explícitamente en un "insert", se puede establecer uno por campo y no se puede emplear junto con la propiedad "identity".
Ingresemos el siguiente lote de comandos en el SQL Server Management Studio:
if object_id('libros') is not null drop table libros; create table libros( codigo int identity, titulo varchar(40), autor varchar(30) default 'Desconocido', editorial varchar(15), precio decimal(6,2) ); go insert into libros (titulo,editorial) values('Martin Fierro','Emece'); insert into libros (titulo,editorial) values('Aprenda PHP','Emece'); -- Veamos que SQL Server creó automáticamente una restricción "default" -- para el campo "autor": exec sp_helpconstraint libros; drop table libros; create table libros( codigo int identity, titulo varchar(40), autor varchar(30), editorial varchar(15), precio decimal(6,2) ); go -- Agregamos una restricción "default" empleando "alter table" -- para que almacene el valor "Desconocido" en el campo "autor": alter table libros add constraint DF_libros_autor default 'Desconocido' for autor; -- Veamos la restrición agregada anteriormente con el procedimiento -- almacenado "sp_helpcontraint": exec sp_helpconstraint libros; insert into libros (titulo,editorial) values('Martin Fierro','Emece'); insert into libros default values; -- Veamos cómo se almacenaron los registros sin valor explícito -- para el campo con restricción "default": select * from libros; -- Agregamos otra restricción "default" para el campo "precio" -- para que almacene el valor 0 en dicho campo: alter table libros add constraint DF_libros_precio default 0 for precio; exec sp_helpconstraint libros;