Вы находитесь на странице: 1из 3

Bases de Datos I.

Uso del Default en SQL Server

DEFAULT EN SQL SERVER


Cada columna de un registro debe contener un valor, aunque sea un valor NULL. Puede
haber situaciones en las que deba cargar una fila de datos en una tabla, pero no conozca
el valor de una columna o el valor ya no exista. Si la columna acepta valores NULL,
puede cargar la fila con un valor NULL. Pero, dado que puede no resultar conveniente
utilizar columnas que acepten valores NULL, una mejor solucin podra ser establecer
una definicin DEFAULT para la columna siempre que sea necesario. Por ejemplo, es
habitual especificar el valor cero como valor predeterminado para las columnas
numricas, o N/D (no disponible) como valor predeterminado para las columnas de
cadenas cuando no se especifica ningn valor.
Al cargar una fila en una tabla con una definicin DEFAULT para una columna, se indica
implcitamente a Motor de base de datos que cargue un valor predeterminado en la
columna en la que no se haya especificado ningn valor.

Nota
Tambin puede indicarle explcitamente a Motor de base de datos que inserte
un valor predeterminado para una columna mediante la clusula DEFAULT
VALUES de la instruccin INSERT STATEMENT.

Si una columna no permite valores NULL y no tiene una definicin DEFAULT, deber
especificar explcitamente un valor para la columna o Motor de base de datos devolver
un error para indicar que la columna no permite valores NULL.
El valor insertado en una columna que se define mediante la combinacin de la
definicin DEFAULT y la nulabilidad de la columna puede resumirse segn se muestra
en siguiente la tabla.

Valores por defecto (default)


Hemos visto que si al insertar registros no se especifica un valor para un campo que
admite valores nulos, se ingresa automticamente "null" y si el campo est declarado
"identity", se inserta el siguiente de la secuencia. A estos valores se les denomina
valores por defecto o predeterminados.
Un valor por defecto se inserta cuando no est presente al ingresar un registro y en
algunos casos en que el dato ingresado es invlido.
Para campos de cualquier tipo no declarados "not null", es decir, que admiten valores
nulos, el valor por defecto es "null". Para campos declarados "not null", no existe valor
por defecto, a menos que se declare explcitamente con la clusula "default".
Para todos los tipos, excepto los declarados "identity", se pueden explicitar valores por
defecto con la clusula "default".
Podemos establecer valores por defecto para los campos cuando creamos la tabla. Para
ello utilizamos "default" al definir el campo. Por ejemplo, queremos que el valor por
defecto del campo "autor" de la tabla "libros" sea "Desconocido" y el valor por defecto
del campo "cantidad" sea "0":

create table libros(


codigo int identity,

1
Bases de Datos I. Uso del Default en SQL Server

titulo varchar(40),
autor varchar(30) not null default 'Desconocido',
editorial varchar(20),
precio decimal(5,2),
cantidad tinyint default 0
);

Si al ingresar un nuevo registro omitimos los valores para el campo "autor" y "cantidad",
Sql Server insertar los valores por defecto; el siguiente valor de la secuencia en
"codigo", en "autor" colocar "Desconocido" y en cantidad "0".
Entonces, si al definir el campo explicitamos un valor mediante la clusula "default", se
ser el valor por defecto.
Ahora, al visualizar la estructura de la tabla con "sp_columns" podemos entender lo que
informa la columna "COLUMN_DEF", muestra el valor por defecto del campo.
Tambin se puede utilizar "default" para dar el valor por defecto a los campos en
sentencias "insert", por ejemplo:
insert into libros (titulo,autor,precio,cantidad)
values ('El gato con botas',default,default,100);
Si todos los campos de una tabla tienen valores predeterminados (ya sea por ser
"identity", permitir valores nulos o tener un valor por defecto), se puede ingresar un
registro de la siguiente manera:
insert into libros default values;
La sentencia anterior almacenar un registro con los valores predeterminados para cada
uno de sus campos.
Entonces, la clusula "default" permite especificar el valor por defecto de un campo. Si
no se explicita, el valor por defecto es "null", siempre que el campo no haya sido
declarado "not null".
Los campos para los cuales no se ingresan valores en un "insert" tomarn los valores
por defecto:
- si tiene el atributo "identity": el valor de inicio de la secuencia si es el primero o el
siguiente valor de la secuencia, no admite clusula "default";
- si permite valores nulos y no tiene clusula "default", almacenar "null";
- si est declarado explcitamente "not null", no tiene valor "default" y no tiene el atributo
"identity", no hay valor por defecto, as que causar un error y el "insert" no se ejecutar.
- si tiene clusula "default" (admita o no valores nulos), el valor definido como
predeterminado;
- para campos de tipo fecha y hora, si omitimos la parte de la fecha, el valor
predeterminado para la fecha es "1900-01-01" y si omitimos la parte de la hora,
"00:00:00".
Un campo slo puede tener un valor por defecto. Una tabla puede tener todos sus
campos con valores por defecto. Que un campo tenga valor por defecto no significa que
no admita valores nulos, puede o no admitirlos.

Restriccin default
La restriccin "default" especifica un valor por defecto para un campo cuando no se
inserta explcitamente en un comando "insert".
Anteriormente, para establecer un valor por defecto para un campo emplebamos la

2
Bases de Datos I. Uso del Default en SQL Server

clusula "default" al crear la tabla, por ejemplo:


create table libros(
...
autor varchar(30) default 'Desconocido',
...
);
Cada vez que establecamos un valor por defecto para un campo de una tabla, SQL
Server creaba automticamente una restriccin "default" para ese campo de esa tabla.
Dicha restriccin, a la cual no le dbamos un nombre, reciba un nombre dado por SQL
Server que consiste "DF" (por default), seguido del nombre de la tabla, el nombre del
campo y letras y nmeros aleatorios.
Podemos agregar una restriccin "default" a una tabla existente con la sintaxis bsica
siguiente:

alter table NOMBRETABLA


add constraint NOMBRECONSTRAINT
default VALORPORDEFECTO
for CAMPO;
En la sentencia siguiente agregamos una restriccin "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 convencin, 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 restriccin "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 restriccin "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 informacin referente a las restriciones de una tabla con el procedimiento
almacenado "sp_helpcontraint":
sp_helpconstraint libros;
aparecen varias columnas con la siguiente informacin:
- constraint_type: el tipo de restriccin y sobre qu campo est establecida
(DEFAULT on column autor),
- constraint_name: el nombre de la restriccin (DF_libros_autor),
- delete_action y update_action: no tienen valores para este tipo de restriccin.
- status_enabled y status_for_replication: no tienen valores para este tipo
de restriccin.
- constraint_keys: el valor por defecto (Desconocido).
Entonces, la restriccin "default" especifica un valor por defecto para un campo cuando
no se inserta explcitamente en un "insert", se puede establecer uno por campo y no se
puede emplear junto con la propiedad "identity"

Вам также может понравиться