Está en la página 1de 14

Instituto Superior de Formacin Docente y Tcnica N 93

Base de Datos

SQL SERVER

Contenido
Tipos de datos............................................................................................................ 2
Bsicos................................................................................................................ 2
Otros aspectos.....................................................................................................2
Campo TEXTO.......................................................................................................3
Campo NUMERICO.................................................................................................5
Campo FECHA Y HORA...........................................................................................6
Crear tablas............................................................................................................... 7
Modificar campos.....................................................................................................9
Agregar y eliminar campos....................................................................................9
Agregar campos y restricciones..................................................................................10
Foreign Key.............................................................................................................11
Ingresar datos.......................................................................................................... 12
Campos Calculados...................................................................................................13

Pgina 1 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

Tipos de datos

Bsicos
El tipo de dato especifica el tipo de informacin que puede guardar un campo: caracteres, nmeros,
etc.
Estos son algunos tipos de datos bsicos de SQL Server (posteriormente veremos otros):

varchar: se usa para almacenar cadenas de caracteres. Una cadena es una secuencia de
caracteres. Se coloca entre comillas (simples); ejemplo: 'Hola', 'Juan Perez'. El tipo "varchar"
define una cadena de longitud variable en la cual determinamos el mximo de caracteres
entre parntesis. Puede guardar hasta 8000 caracteres. Por ejemplo, para almacenar cadenas
de hasta 30 caracteres, definimos un campo de tipo varchar(30), es decir, entre parntesis,
junto al nombre del campo colocamos la longitud.
Si asignamos una cadena de caracteres de mayor longitud que la definida, la cadena no se
carga, aparece un mensaje indicando tal situacin y la sentencia no se ejecuta.
Por ejemplo, si definimos un campo de tipo varchar(10) e intentamos asignarle la cadena
'Buenas tardes', aparece un mensaje de error y la sentencia no se ejecuta.
integer: se usa para guardar valores numricos enteros, de -2000000000 a 2000000000
aprox. Definimos campos de este tipo cuando queremos representar, por ejemplo, cantidades.
float: se usa para almacenar valores numricos con decimales. Se utiliza como separador el
punto (.). Definimos campos de este tipo para precios, por ejemplo.

Antes de crear una tabla debemos pensar en sus campos y optar por el tipo de dato adecuado para
cada uno de ellos.
Por ejemplo, si en un campo almacenaremos nmeros enteros, el tipo "float" sera una mala
eleccin; si vamos a guardar precios, el tipo "float" es ms adecuado, no as "integer" que no tiene
decimales. Otro ejemplo, si en un campo vamos a guardar un nmero telefnico o un nmero de
documento, usamos "varchar", no "integer" porque si bien son dgitos, con ellos no realizamos
operaciones matemticas.
Otros aspectos
Ya explicamos que al crear una tabla debemos elegir la estructura adecuada, esto es, definir los
campos y sus tipos ms precisos, segn el caso.
El tipo de dato especificado en la definicin de cada campo indica los valores permitidos para cada
uno de ellos.
Hasta ahora hemos visto 3 tipos de datos: varchar, integer y float. Hay ms tipos, incluso, subtipos.
Los valores que podemos guardar son:
1. TEXTO: Para almacenar texto usamos cadenas de caracteres.
Las cadenas se colocan entre comillas simples. Podemos almacenar letras, smbolos y dgitos
con los que no se realizan operaciones matemticas, por ejemplo, cdigos de identificacin,
Pgina 2 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

nmeros de documentos, nmeros telefnicos.


SQL Server ofrece los siguientes tipos: char, nchar, varchar, nvarchar, text y ntext.
2. NUMEROS: Existe variedad de tipos numricos para representar enteros, decimales,
monedas.
Para almacenar valores enteros, por ejemplo, en campos que hacen referencia a cantidades,
precios, etc., usamos el tipo integer (y sus subtipos: tinyint, smallint y bigint).
Para almacenar valores con decimales exactos, utilizamos: numeric o decimal (son
equivalentes).
Para guardar valores decimales aproximados: float y real. Para almacenar valores monetarios:
money y smallmoney.
3. FECHAS y HORAS: para guardar fechas y horas SQL Server dispone de 2 tipos: datetime y
smalldatetime.
Existen otros tipos de datos que analizaremos en secciones prximas.
Entonces, cuando creamos una tabla y definir sus campos debemos elegir el tipo de dato ms
preciso. Por ejemplo, si necesitamos almacenar nombres usamos texto; si un campo numrico
almacenar solamente valores enteros el tipo "integer" es ms adecuado que, por ejemplo un "float";
si necesitamos almacenar precios, lo ms lgico es utilizar el tipo "money".
A continuacin analizaremos en detalle cada tipo de dato bsicos.

Campo TEXTO

Ya explicamos que al crear una tabla debemos elegir la estructura adecuada, esto es, definir los
campos y sus tipos ms precisos, segn el caso.
Para almacenar TEXTO usamos cadenas de caracteres.
Las cadenas se colocan entre comillas simples.
Podemos almacenar letras, smbolos y dgitos con los que no se realizan operaciones matemticas,
por ejemplo, cdigos de identificacin, nmeros de documentos, nmeros telefnicos.
Tenemos los siguientes tipos:
1. varchar(x): define una cadena de caracteres de longitud variable en la cual determinamos el
mximo de caracteres con el argumento "x" que va entre parntesis.
Si se omite el argumento coloca 1 por defecto. Su rango va de 1 a 8000 caracteres.
2. char(x): define una cadena de longitud fija determinada por el argumento "x". Si se omite el
argumento coloca 1 por defecto. Su rango es de 1 a 8000 caracteres.
Si la longitud es invariable, es conveniente utilizar el tipo char; caso contrario, el tipo varchar.
Ocupa tantos bytes como se definen con el argumento "x".
"char" viene de character, que significa caracter en ingls.
3. text: guarda datos binarios de longitud variable, puede contener hasta 2000000000
caracteres. No admite argumento para especificar su longitud.
Pgina 3 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

4. nvarchar(x): es similar a "varchar", excepto que permite almacenar caracteres Unicode, su


rango va de 0 a 4000 caracteres porque se emplean 2 bytes por cada caracter.
5. nchar(x): es similar a "char" excpeto que acepta caracteres Unicode, su rango va de 0 a 4000
caracteres porque se emplean 2 bytes por cada caracter.
6. ntext: es similar a "text" excepto que permite almacenar caracteres Unicode, puede contener
hasta 1000000000 caracteres. No admite argumento para especificar su longitud.
En general se usarn los 3 primeros.
Si intentamos almacenar en un campo una cadena de caracteres de mayor longitud que la definida,
aparece un mensaje indicando tal situacin y la sentencia no se ejecuta.
Por ejemplo, si definimos un campo de tipo varchar(10) y le asignamos la cadena 'Aprenda PHP' (11
caracteres), aparece un mensaje y la sentencia no se ejecuta.
Si ingresamos un valor numrico (omitiendo las comillas), lo convierte a cadena y lo ingresa como
tal.
Por ejemplo, si en un campo definido como varchar(5) ingresamos el valor 12345, lo toma como si
hubisemos tipeado '12345', igualmente, si ingresamos el valor 23.56, lo convierte a '23.56'. Si el
valor numrico, al ser convertido a cadena supera la longitud definida, aparece un mensaje de error y
la sentencia no se ejecuta.
Es importante elegir el tipo de dato adecuado segn el caso, el ms preciso.
Para almacenar cadenas que varan en su longitud, es decir, no todos los registros tendrn la misma
longitud en un campo determinado, se emplea "varchar" en lugar de "char".
Por ejemplo, en campos que guardamos nombres y apellidos, no todos los nombres y apellidos
tienen la misma longitud.
Para almacenar cadenas que no varan en su longitud, es decir, todos los registros tendrn la misma
longitud en un campo determinado, se emplea "char".
Por ejemplo, definimos un campo "codigo" que constar de 5 caracteres, todos los registros tendrn
un cdigo de 5 caracteres, ni ms ni menos.
Para almacenar valores superiores a 8000 caracteres se debe emplear "text".
Tipo
Bytes de almacenamiento
_______________________________________
varchar(x)
0 a 8K
char(x)
0 a 8K
text
0 a 2GB
nvarchar(x)
0 a 8K
nchar(x) 0 a 8K
ntext
0 a 2GB
Pgina 4 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

Campo NUMERICO
Ya explicamos que al crear una tabla debemos elegir la estructura adecuada, esto es, definir los
campos y sus tipos ms precisos, segn el caso.
Para almacenar valores NUMERICOS SQL Server dispone de varios tipos.
Para almacenar valores ENTEROS, por ejemplo, en campos que hacen referencia a cantidades,
usamos:
1) integer o int: su rango es de -2000000000 a 2000000000 aprox. El tipo "integer" tiene subtipos:
- smallint: Puede contener hasta 5 digitos. Su rango va desde 32000 hasta 32000 aprox.
- tinyint: Puede almacenar valores entre 0 y 255.
- bigint: De 9000000000000000000 hasta 9000000000000000000 aprox.
Para almacenar valores numricos EXACTOS con decimales, especificando la cantidad de cifras a la
izquierda y derecha del separador decimal, utilizamos:
2) decimal o numeric (t,d): Pueden tener hasta 38 digitos, guarda un valor exacto. El primer
argumento indica el total de dgitos y el segundo, la cantidad de decimales.
Por ejemplo, si queremos almacenar valores entre -99.99 y 99.99 debemos definir el campo como
tipo "decimal(4,2)". Si no se indica el valor del segundo argumento, por defecto es "0". Por ejemplo,
si definimos "decimal(4)" se pueden guardar valores entre -9999 y 9999.
El rango depende de los argumentos, tambin los bytes que ocupa.
Se utiliza el punto como separador de decimales.
Si ingresamos un valor con ms decimales que los permitidos, redondea al ms cercano; por
ejemplo, si definimos "decimal(4,2)" e ingresamos el valor "12.686", guardar "12.69", redondeando
hacia arriba; si ingresamos el valor "12.682", guardar "12.67", redondeando hacia abajo.
Para almacenar valores numricos APROXIMADOS con decimales utilizamos:
3) float y real: De 1.79E+308 hasta 1.79E+38. Guarda valores aproximados.
4) real: Desde 3.40E+308 hasta 3.40E+38. Guarda valores aproximados.
Para almacenar valores MONETARIOS empleamos:
5) money: Puede tener hasta 19 digitos y slo 4 de ellos puede ir luego del separador decimal; entre
900000000000000.5808 aprox y 900000000000000.5807.
6) smallmoney: Entre 200000.3648 y 200000.3647 aprox.
Para todos los tipos numricos:
- si intentamos ingresar un valor fuera de rango, no lo permite.
- si ingresamos una cadena, SQL Server intenta convertirla a valor numrico, si dicha cadena consta
solamente de dgitos, la conversin se realiza, luego verifica si est dentro del rango, si es as, la
ingresa, sino, muestra un mensaje de error y no ejecuta la sentencia. Si la cadena contiene
caracteres que SQL Server no puede convertir a valor numrico, muestra un mensaje de error y la
sentencia no se ejecuta.
Por ejemplo, definimos un campo de tipo decimal(5,2), si ingresamos la cadena '12.22', la convierte
al valor numrico 12.22 y la ingresa; si intentamos ingresar la cadena '1234.56', la convierte al valor
numrico 1234.56, pero como el mximo valor permitido es 999.99, muestra un mensaje indicando
que est fuera de rango. Si intentamos ingresar el valor '12y.25', SQL Server no puede realizar la
conversin y muestra un mensaje de error.
Pgina 5 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

Es importante elegir el tipo de dato adecuado segn el caso, el ms preciso. Por ejemplo, si un
campo numrico almacenar valores positivos menores a 255, el tipo "int" no es el ms adecuado,
conviene el tipo "tinyint", de esta manera usamos el menor espacio de almacenamiento posible.
Si vamos a guardar valores monetarios menores a 200000 conviene emplear "smallmoney" en lugar
de "money".
Tipo
Bytes de almacenamiento
_______________________________________
int
4
smallint
2
tinyint
1
bigint
8
decimal
float
real

2 a 17
4u8
4u8

money
smallmoney 4

Campo FECHA Y HORA


Ya explicamos que al crear una tabla debemos elegir la estructura adecuada, esto es, definir los
campos y sus tipos ms precisos, segn el caso.
Para almacenar valores de tipo FECHA Y HORA SQL Server dispone de dos tipos:
1) datetime: puede almacenar valores desde 01 de enero de 1753 hasta 31 de diciembre de 9999.
2) smalldatetime: el rango va de 01 de enero de 1900 hasta 06 de junio de 2079.
Las fechas se ingresan entre comillas simples.
Para almacenar valores de tipo fecha se permiten como separadores "/", "-" y ".".
SQL Server reconoce varios formatos de entrada de datos de tipo fecha. Para establecer el orden de
las partes de una fecha (dia, mes y ao) empleamos "set dateformat". Estos son los formatos:
-mdy: 4/15/96 (mes y da con 1 2 dgitos y ao con 2 4 dgitos),
-myd: 4/96/15,
-dmy: 15/4/1996
-dym: 15/96/4,
-ydm: 96/15/4,
-ydm: 1996/15/4,
Para ingresar una fecha con formato "da-mes-ao", tipeamos:
set dateformat dmy;
El formato por defecto es "mdy".
Todos los valores de tipo "datetime" se muestran en formato "ao-mes-da hora:minuto:segundo
.milisegundos", independientemente del formato de ingreso que hayamos seteado.
Pgina 6 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

Podemos ingresar una fecha, sin hora, en tal caso la hora se guarda como "00:00:00". Por ejemplo,
si ingresamos '25-12-01' (ao de 2 dgitos), lo mostrar as: '2001-12-25 00:00:00.000'.
Podemos ingresar una hora sin fecha, en tal caso, coloca la fecha "1900-01-01". Por ejemplo, si
ingresamos '10:15', mostrar '1900-01-01 10:15.000'.
Podemos emplear los operadores relacionales vistos para comparar fechas.
Tipo
Bytes de almacenamiento
_______________________________________
datetime
8
smalldatetime
4

Crear tablas
Una base de datos almacena su informacin en tablas.
Una tabla es una estructura de datos que organiza los datos en columnas y filas; cada columna es
un campo (o atributo) y cada fila, un registro. La interseccin de una columna con una fila, contiene
un dato especfico, un solo valor.
Cada registro contiene un dato por cada columna de la tabla.
Cada campo (columna) debe tener un nombre. El nombre del campo hace referencia a la
informacin que almacenar.
Cada campo (columna) tambin debe definir el tipo de dato que almacenar.
Las tablas forman parte de una base de datos.
Nosotros trabajaremos con la base de datos llamada wi520641_sqlserverya (este nombre se debe a
que las empresas de hosting es la que lo define), que ya he creado en el servidor
sqlserverya.com.ar.
Para ver las tablas existentes creadas por los usuarios en una base de datos usamos el
procedimiento almacenado "sp_tables @table_owner='dbo';":
sp_tables @table_owner='dbo';
El parmetro @table_owner='dbo' indica que solo muestre las tablas de usuarios y no las que crea el
SQL Server para administracin interna.
Finalizamos cada comando con un punto y coma.
Al crear una tabla debemos resolver qu campos (columnas) tendr y que tipo de datos almacenarn
cada uno de ellos, es decir, su estructura.
La sintaxis bsica y general para crear una tabla es la siguiente:
create table NOMBRETABLA(
Pgina 7 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

NOMBRECAMPO1 TIPODEDATO,
...
NOMBRECAMPON TIPODEDATO
);
La tabla debe ser definida con un nombre que la identifique y con el cual accederemos a ella.
Creamos una tabla llamada "usuarios" y entre parntesis definimos los campos y sus tipos:
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
Cada campo con su tipo debe separarse con comas de los siguientes, excepto el ltimo.
Cuando se crea una tabla debemos indicar su nombre y definir al menos un campo con su tipo de
dato. En esta tabla "usuarios" definimos 2 campos:

nombre: que contendr una cadena de caracteres de 30 caracteres de longitud, que


almacenar el nombre de usuario y
clave: otra cadena de caracteres de 10 de longitud, que guardar la clave de cada usuario.

Cada usuario ocupar un registro de esta tabla, con su respectivo nombre y clave.
Para nombres de tablas, se puede utilizar cualquier caracter permitido para nombres de directorios,
el primero debe ser un caracter alfabtico y no puede contener espacios. La longitud mxima es de
128 caracteres.
Si intentamos crear una tabla con un nombre ya existente (existe otra tabla con ese nombre),
mostrar un mensaje indicando que ya hay un objeto llamado 'usuarios' en la base de datos y la
sentencia no se ejecutar. Esto es muy importante ya que cuando haga los ejercicios en este sitio
puede haber otra persona que haya creado una tabla con el nombre que usted especifique.
Para ver la estructura de una tabla usamos el procedimiento almacenado "sp_columns" junto al
nombre de la tabla:
sp_columns usuarios;
aparece mucha informacin que no analizaremos en detalle, como el nombre de la tabla, su
propietario, los campos, el tipo de dato de cada campo, su longitud, etc.:
...COLUMN_NAME
TYPE_NAME
LENGHT
_______________________________________
nombre
varchar
30
clave varchar
10
Para eliminar una tabla usamos "drop table" junto al nombre de la tabla a eliminar:
drop table usuarios;
Pgina 8 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

Si intentamos eliminar una tabla que no existe, aparece un mensaje de error indicando tal situacin y
la sentencia no se ejecuta. Para evitar este mensaje podemos agregar a la instruccin lo siguiente:
if object_id('usuarios') is not null
drop table usuarios;
En la sentencia precedente especificamos que elimine la tabla "usuarios" si existe.

Modificar campos
Hemos visto que "alter table" permite modificar la estructura de una tabla. Tambin podemos
utilizarla para modificar campos de una tabla.
La sintaxis bsica para modificar un campo existente es la siguiente:
alter table NOMBRETABLA
alter column CAMPO NUEVADEFINICION;
Modificamos el campo "titulo" extendiendo su longitud y para que NO admita valores nulos:
alter table libros
alter column titulo varchar(40) not null;
En el siguiente ejemplo alteramos el campo "precio" de la tabla "libros" que fue definido "decimal(6,2)
not null" para que no acepte valores nulos:
alter table libros
alter column precio decimal(6,2) null;
SQL Server tiene algunas excepciones al momento de modificar los campos. No permite modificar:
- campos de tipo text, image, ntext y timestamp.
- un campo que es usado en un campo calculado.
- campos que son parte de ndices o tienen restricciones, a menos que el cambio no afecte al ndice
o a la restriccin, por ejemplo, se puede ampliar la longitud de un campo de tipo caracter.
- agregando o quitando el atributo "identity".
- campos que afecten a los datos existentes cuando una tabla contiene registros (ejemplo: un campo
contiene valores nulos y se pretende redefinirlo como "not null"; un campo int guarda un valor 300 y
se pretende modificarlo a tinyint, etc.).

Agregar y eliminar campos

"alter table" permite modificar la estructura de una tabla.


Podemos utilizarla para agregar, modificar y eliminar campos de una tabla.
Para agregar un nuevo campo a una tabla empleamos la siguiente sintaxis bsica:
alter table NOMBRETABLA
add NOMBRENUEVOCAMPO DEFINICION;
Pgina 9 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

En el siguiente ejemplo agregamos el campo "cantidad" a la tabla "libros", de tipo tinyint, que acepta
valores nulos:
alter table libros
add cantidad tinyint;
Puede verificarse la alteracin de la estructura de la tabla ejecutando el procedimiento almacenado
"sp_columns".
SQL Server no permite agregar campos "not null" a menos que se especifique un valor por defecto:
alter table libros
add autor varchar(20) not null default 'Desconocido';
En el ejemplo anterior, se agreg una restriccin "default" para el nuevo campo, que puede
verificarse ejecutando el procedimiento almacenado "sp_helpconstraint".
Al agregar un campo puede especificarse que sea "identity" (siempre que no exista otro campo
identity).
Para eliminar campos de una tabla la sintaxis bsica es la siguiente:
alter table NOMBRETABLA
drop column NOMBRECAMPO;
En el siguiente ejemplo eliminamos el campo "precio" de la tabla "libros":
alter table libros
drop column precio;
No pueden eliminarse los campos que son usados por un ndice o tengan restricciones. No puede
eliminarse un campo si es el nico en la tabla.
Podemos eliminar varios campos en una sola sentencia:
alter table libros
drop column editorial,edicion;
Agregar campos y restricciones
Podemos agregar un campo a una tabla y en el mismo momento aplicarle una restriccin.
Para agregar un campo y establecer una restriccin, la sintaxis bsica es la siguiente:
alter table TABLA
add CAMPO DEFINICION
constraint NOMBRERESTRICCION TIPO;
Agregamos a la tabla "libros", el campo "titulo" de tipo varchar(30) y una restriccin "unique" con
ndice agrupado:
alter table libros
add titulo varchar(30)
Pgina 10 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

constraint UQ_libros_autor unique clustered;


Agregamos a la tabla "libros", el campo "codigo" de tipo int identity not null y una restriccin "primary
key" con ndice no agrupado:
alter table libros
add codigo int identity not null
constraint PK_libros_codigo primary key nonclustered;
Agregamos a la tabla "libros", el campo "precio" de tipo decimal(6,2) y una restriccin "check":
alter table libros
add precio decimal(6,2)
constraint CK_libros_precio check (precio>=0);

Foreign Key
Hemos visto que una de las alternativas que SQL Server ofrece para asegurar la integridad de datos
es el uso de restricciones (constraints). Aprendimos que las restricciones se establecen en tablas y
campos asegurando que los datos sean vlidos y que las relaciones entre las tablas se mantengan;
vimos que existen distintos tipos de restricciones:
1) de los campos: default y check
2) de la tabla: primary key y unique.
3) referencial: foreign key, la analizaremos ahora.
Con la restriccin "foreign key" se define un campo (o varios) cuyos valores coinciden con la clave
primaria de la misma tabla o de otra, es decir, se define una referencia a un campo con una
restriccin "primary key" o "unique" de la misma tabla o de otra.
La integridad referencial asegura que se mantengan las referencias entre las claves primarias y las
externas. Por ejemplo, controla que si se agrega un cdigo de editorial en la tabla "libros", tal cdigo
exista en la tabla "editoriales".
Tambin controla que no pueda eliminarse un registro de una tabla ni modificar la clave primaria si
una clave externa hace referencia al registro. Por ejemplo, que no se pueda eliminar o modificar un
cdigo de "editoriales" si existen libros con dicho cdigo.
La siguiente es la sintaxis parcial general para agregar una restriccin "foreign key":
alter table NOMBRETABLA1
add constraint NOMBRERESTRICCION
foreign key (CAMPOCLAVEFORANEA)
references NOMBRETABLA2 (CAMPOCLAVEPRIMARIA);
Analicmosla:
- NOMBRETABLA1 referencia el nombre de la tabla a la cual le aplicamos la restriccin,
- NOMBRERESTRICCION es el nombre que le damos a la misma,
- luego de "foreign key", entre parntesis se coloca el campo de la tabla a la que le aplicamos la
restriccin que ser establecida como clave fornea,
Pgina 11 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

- luego de "references" indicamos el nombre de la tabla referenciada y el campo que es clave


primaria en la misma, a la cual hace referencia la clave fornea. La tabla referenciada debe tener
definida una restriccin "primary key" o "unique"; si no la tiene, aparece un mensaje de error.
Para agregar una restriccin "foreign key" al campo "codigoeditorial" de "libros", tipeamos:
alter table libros
add constraint FK_libros_codigoeditorial
foreign key (codigoeditorial)
references editoriales(codigo);
En el ejemplo implementamos una restriccin "foreign key" para asegurarnos que el cdigo de la
editorial de la de la tabla "libros" ("codigoeditorial") est asociada con un cdigo vlido en la tabla
"editoriales" ("codigo").
Cuando agregamos cualquier restriccin a una tabla que contiene informacin, SQL Server controla
los datos existentes para confirmar que cumplen con la restriccin, si no los cumple, la restriccin no
se aplica y aparece un mensaje de error. Por ejemplo, si intentamos agregar una restriccin "foreign
key" a la tabla "libros" y existe un libro con un valor de cdigo para editorial que no existe en la tabla
"editoriales", la restriccin no se agrega.
Acta en inserciones. Si intentamos ingresar un registro (un libro) con un valor de clave fornea
(codigoeditorial) que no existe en la tabla referenciada (editoriales), SQL server muestra un mensaje
de error. Si al ingresar un registro (un libro), no colocamos el valor para el campo clave fornea
(codigoeditorial), almacenar "null", porque esta restriccin permite valores nulos (a menos que se
haya especificado lo contrario al definir el campo).
Acta en eliminaciones y actualizaciones. Si intentamos eliminar un registro o modificar un valor de
clave primaria de una tabla si una clave fornea hace referencia a dicho registro, SQL Server no lo
permite (excepto si se permite la accin en cascada, tema que veremos posteriormente). Por
ejemplo, si intentamos eliminar una editorial a la que se hace referencia en "libros", aparece un
mensaje de error.
Esta restriccin (a diferencia de "primary key" y "unique") no crea ndice automaticamente.
La cantidad y tipo de datos de los campos especificados luego de "foreign key" DEBEN coincidir con
la cantidad y tipo de datos de los campos de la clusula "references".
Esta restriccin se puede definir dentro de la misma tabla (lo veremos ms adelante) o entre distintas
tablas.
Una tabla puede tener varias restricciones "foreign key".
No se puede eliminar una tabla referenciada en una restriccin "foreign key", aparece un mensaje de
error.
Una restriccion "foreign key" no puede modificarse, debe eliminarse y volverse a crear.
Para ver informacin acerca de esta restriccin podemos ejecutar el procedimiento almacenado
"sp_helpconstraint" junto al nombre de la tabla. Nos muestra el tipo, nombre, la opcin para
eliminaciones y actualizaciones, el estado (temas que veremos ms adelante), el nombre del campo
y la tabla y campo que referencia.
Tambin informa si la tabla es referenciada por una clave fornea.

Ingresar datos
Pgina 12 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

Un registro es una fila de la tabla que contiene los datos propiamente dichos. Cada registro tiene un
dato por cada columna (campo). Nuestra tabla "usuarios" consta de 2 campos, "nombre" y "clave".
Al ingresar los datos de cada registro debe tenerse en cuenta la cantidad y el orden de los campos.
La sintaxis bsica y general es la siguiente:
insert into NOMBRETABLA (NOMBRECAMPO1, ..., NOMBRECAMPOn)
values (VALORCAMPO1, ..., VALORCAMPOn);
Usamos "insert into", luego el nombre de la tabla, detallamos los nombres de los campos entre
parntesis y separados por comas y luego de la clusula "values" colocamos los valores para cada
campo, tambin entre parntesis y separados por comas.
Para agregar un registro a la tabla tipeamos:
insert into usuarios (nombre, clave) values ('Mariano','payaso');
Note que los datos ingresados, como corresponden a cadenas de caracteres se colocan entre
comillas simples.
Para ver los registros de una tabla usamos "select":
select * from usuarios;
El comando "select" recupera los registros de una tabla.
Con el asterisco indicamos que muestre todos los campos de la tabla "usuarios".
Es importante ingresar los valores en el mismo orden en que se nombran los campos:
insert into usuarios (clave, nombre) values ('River','Juan');
En el ejemplo anterior se nombra primero el campo "clave" y luego el campo "nombre" por eso, los
valores tambin se colocan en ese orden.
Si ingresamos los datos en un orden distinto al orden en que se nombraron los campos, no aparece
un mensaje de error y los datos se guardan de modo incorrecto.
En el siguiente ejemplo se colocan los valores en distinto orden en que se nombran los campos, el
valor de la clave (la cadena "Boca") se guardar en el campo "nombre" y el valor del nombre (la
cadena "Luis") en el campo "clave":
insert into usuarios (nombre,clave) values ('Boca','Luis');

Campos Calculados
Un campo calculado es un campo que no se almacena fsicamente en la tabla. SQL Server emplea
una frmula que detalla el usuario al definir dicho campo para calcular el valor segn otros campos
de la misma tabla.
Un campo calculado no puede:
- definirse como "not null".
- ser una subconsulta.
- tener restriccin "default" o "foreign key".
- insertarse ni actualizarse.

Pgina 13 de 14

Instituto Superior de Formacin Docente y Tcnica N 93


Base de Datos

Puede ser empleado como llave de un ndice o parte de restricciones "primary key" o "unique" si la
expresin que la define no cambia en cada consulta.
Creamos un campo calculado denominado "sueldototal" que suma al sueldo bsico de cada
empleado la cantidad abonada por los hijos (100 por cada hijo):
create table empleados(
documento char(8),
nombre varchar(10),
domicilio varchar(30),
sueldobasico decimal(6,2),
cantidadhijos tinyint default 0,
sueldototal as sueldobasico + (cantidadhijos*100)
);
Tambin se puede agregar un campo calculado a una tabla existente:
alter table NOMBRETABLA
add NOMBRECAMPOCALCULADO as EXPRESION;
alter table empleados
add sueldototal as sueldo+(cantidadhijos*100);
Los campos de los cuales depende el campo calculado no pueden eliminarse, se debe eliminar
primero el campo calculado.

Pgina 14 de 14