47 - Restricción default


Problema:

Trabajamos con la tabla "libros" de una librería.
Eliminamos la tabla, si existe:

 if object_id('libros') is not null
  drop table libros;

Creamos la tabla:

 create table libros(
  codigo int identity,
  titulo varchar(40),
  autor varchar(30) default 'Desconocido',
  editorial varchar(15),
  precio decimal(6,2)
 );

Ingresamos algunos registros sin valor para el campo "autor":

 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;

aparece la siguiente información:

constraint_type			constraint_name		...	constraint_keys
--------------------------------------------------------------------------------
DEFAULT on column autor		 DF_libros_autor	(n/a)	('Desconocido')

La restricción, a la cual no le dimos un nombre, recibe un nombre dado por SQL Server "DF_libros_autor_67C95AEA", que consiste en "DF" (por default), seguido del nombre de la tabla, el nombre del campo y unos números y letras aleatorios.

Vamos a eliminar la tabla y la crearemos nuevamente, sin la cláusula "default":

 drop table libros;
 create table libros(
  codigo int identity,
  titulo varchar(40),
  autor varchar(30),
  editorial varchar(15),
  precio decimal(6,2)
 );

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;

aparece la siguiente información:

constraint_type			constraint_name		...	constraint_keys
---------------------------------------------------------------------------------
DEFAULT on column autor		DF_libros_autor		(n/a)	('Desconocido')

Agregamos algunos registros:

 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;

Veamos la restrición agregada anteriormente con el procedimiento almacenado "sp_helpcontraint":

 exec sp_helpconstraint libros;



Retornar