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

ADMINISTRAR MICROSOFT

SQL SERVER 2008 R2


i

Tabla de contenido
Instalar y administrar Microsoft SQL Server 2008 R2 Express ............................................................................................. 1
Descarga e instalacin de Microsoft SQL Server 2008 R2 Express en Windows 7 ........................................................ 2
Administracin de Microsoft SQL Server 2008 R2 Express ........................................................................................... 13
Crear una nueva base de datos para nuestras aplicaciones de gestin (facturacin, contabilidad, rrhh) ..................... 15
Crear una tabla en una base de datos SQL Server 2008 R2 desde Microsoft SQL Server Management Studio ......... 18
Configurar Microsoft SQL Server para permitir conexiones remotas o acceso externo ................................................ 26
Configurar y programar copias de seguridad de Microsoft SQL Server 2008 R2 .......................................................... 31
Realizar copia de seguridad (backup) de una base de datos SQL Server desde Management Studio ........................ 34
Programar copias de seguridad automticas de SQL Server 2008 R2 ......................................................................... 38
Crear origen de datos ODBC de SQL Server 2008 ....................................................................................................... 48
Acceso a base de datos Microsoft SQL Server 2008 R2 Express mediante Microsoft Access y ODBC ....................... 54
Algunos errores y su posible solucin ............................................................................................................................ 59
EJERCICIOS 1 .................................................................................................................................................................... 61
1. Objetivos y alcances del tutorial de Microsoft Sql Server. ............................................................................... 61
2. Crear una tabla (create table - sp_tables - sp_columns - drop table) .............................................................. 61
Primer problema: ....................................................................................................................................................... 61
Segundo problema: ................................................................................................................................................... 62
3. Insertar y recuperar registros de una tabla (insert into - select) ...................................................................... 63
Primer problema: ....................................................................................................................................................... 63
Segundo problema: ................................................................................................................................................... 65
4. Tipos de datos bsicos .................................................................................................................................... 66
Primer problema: ....................................................................................................................................................... 66
Segundo problema: ................................................................................................................................................... 67
5. Recuperar algunos campos (select) ................................................................................................................ 68
Primer problema: ....................................................................................................................................................... 68
Segundo problema: ................................................................................................................................................... 70
6. Recuperar algunos registros (where) .............................................................................................................. 71
Primer problema: ....................................................................................................................................................... 71
Segundo problema: ................................................................................................................................................... 73
7. Operadores relacionales .................................................................................................................................. 74
Primer problema: ....................................................................................................................................................... 74
Segundo problema: ................................................................................................................................................... 75
8. Borrar registros (delete) ................................................................................................................................... 76
Primer problema: ....................................................................................................................................................... 76
Segundo problema: ................................................................................................................................................... 78
9. Actualizar registros (update) ............................................................................................................................ 79
ii

Primer problema: ....................................................................................................................................................... 79
Segundo problema: ................................................................................................................................................... 81
10. Comentarios..................................................................................................................................................... 83
Problema: .................................................................................................................................................................. 83
11. Valores null (is null).......................................................................................................................................... 84
Primer problema: ....................................................................................................................................................... 84
Segundo problema: ................................................................................................................................................... 87
12. Clave primaria .................................................................................................................................................. 89
Primer problema: ....................................................................................................................................................... 89
Segundo problema: ................................................................................................................................................... 90
13. Campo con atributo Identity ............................................................................................................................. 92
Primer problema: ....................................................................................................................................................... 92
Segundo problema: ................................................................................................................................................... 94
14. Otras caractersticas del atributo Identity......................................................................................................... 96
Primer problema: ....................................................................................................................................................... 96
Segundo problema: ................................................................................................................................................... 98
15. Truncate table ................................................................................................................................................ 100
Primer problema: ..................................................................................................................................................... 100
16. Otros tipos de datos en SQL Server .............................................................................................................. 103
a. TEXTO: .......................................................................................................................................................... 103
b. NUMEROS:.................................................................................................................................................... 103
c. FECHAS y HORAS: ....................................................................................................................................... 103
17. Tipo de dato (texto) ........................................................................................................................................ 104
Primer problema: ..................................................................................................................................................... 104
Segundo problema: ................................................................................................................................................. 105
18. Tipo de dato (numrico) ................................................................................................................................. 106
Primer problema: ..................................................................................................................................................... 107
Segundo problema: ................................................................................................................................................. 108
19. Tipo de dato (fecha y hora) ............................................................................................................................ 109
Primer problema: ..................................................................................................................................................... 109
20. Ingresar algunos campos (insert into)............................................................................................................ 112
Problema: ................................................................................................................................................................ 112

1

Instalar y
administrar Microsoft
SQL Server 2008 R2
Express


Explicamos cmo instalar y administrar Microsoft SQL Server 2008
R2 Express en un equipo con Microsoft Windows 7 (Seven) como
sistema operativo. Mostramos paso a paso cmo descargar, instalar y
administrar este motor de base de datos gratuito de Microsoft.
Explicamos cmo crear una base de datos y una tabla con campo
autoincremento, explicamos cmo hacer copias de seguridad (backup)
automticas programadas y cmo acceder medianteODBC y Access a
SQL Server.

Descarga e instalacin de Microsoft SQL Server 2008 R2
Express en Windows 7.
Administracin de Microsoft SQL Server 2008 R2
Express.
o Crear una nueva base de datos para nuestras
aplicaciones de gestin (facturacin,
contabilidad, rrhh).
o Crear una tabla en una base de datos SQL Server
2008 R2 desde Microsoft SQL Server Management
Studio.
o Configurar Microsoft SQL Server para acceso
externo o remoto.
2

o Configurar y programar copias de seguridad de
Microsoft SQL Server 2008 R2.
Crear dispositivo para copias de seguridad SQL
Server.
Realizar copia de seguridad (backup) de una
base de datos SQL Server desde Management
Studio.
Programar copias de seguridad automticas de
SQL Server 2008 R2.
Crear origen de datos ODBC de SQL Server 2008.
Acceso a base de datos Microsoft SQL Server 2008 R2
Express mediante Microsoft Access y ODBC.
Algunos errores y su posible solucin.
Artculos relacionados.
Crditos.

Descarga e instalacin de Microsoft SQL
Server 2008 R2 Express en Windows 7
Descargaremos el fichero de instalacin de SQL Server 2008 Express (es
gratuito) abriendo cualquier navegador y accediendo a la URL:
http://www.microsoft.com/express/Database
Seleccionaremos el tipo de instalacin (32 64 bits), en nuestro caso,
puesto que tenemos Microsoft Windows 7 de 64 bits sobre arquitectura
de 64 bits, seleccionaremos 64 bits, se iniciar la descarga
de SQLEXPRWT_x64_ENU.exe (de 248MB):
3


Se iniciar la descarga del fichero de instalacin seleccionado:

Ejecutaremos el fichero descargado (si tenemos Microsoft
Windows 7 es recomendable pulsar con el botn derecho del
ratn sobre el ejecutable y seleccionar "Ejecutar como
administrador"):
4


Si tenemos UAC activado pulsaremos en "S" en el mensaje
"Desea permitir que este programa realice cambios en el
equipo?":

Seleccionaremos
"New installation or add features to an existing installation":
5


Leeremos los trminos de licencia de Microsoft SQL Server
2008 R2 Express, si estamos de acuerdo marcaremos
"I accept the license terms" y pulsaremos "Next":

Seleccionaremos los elementos a instalar:
Database Engine services: servicios del motor de base de datos SQL Server, caracterstica de
obligatoria instalacin para el funcionamiento del servidor de SQL Server.
o SQL Server Replication: herramienta de replicacin
de bases de datos SQL Server.
6

Management Tools - Basic: consola de administracin de
SQL Server.
SQL Client Connectivity SDK: herramientas de conexin
con SQL Server para desarrolladores.
Seleccionaremos la carpeta de instalacin y pulsaremos
"Next":

Introduciremos el nombre de la instancia de SQL Server
(podemos tener varias instaladas en un mismo equipo), en
nuestro caso "SQLExpress2008":
7


Introduciremos el usuario y contrasea para cada servicio que
se instalar, pulsando en "Use the same account for all SQL
Server services" podremos establecer el mismo usuario para
todos los servicios de Microsoft SQL Server 2008 R2 Express:

Nota: SQL Server Browser es el servicio de resolucin de
nombres que proporciona informacin de conexin a SQL
8

Server para equipos cliente. Este servicio es compartido a
travs de mltiples instancias de SQL
Server y Integration Services.
Introduciremos usuario en "Account Name" y contrasea en
"Password":

En la ventana anterior, tambin podremos elegir el tipo de
inicio para cada servicio, por defecto SQL
Server Database Engine es automtico (Automatic) y SQL
Server Browser est desactivado (Disabled):

A continuacin deberemos elegir el mtodo de autenticacin
en la pestaa "Account Provisioning", las posibilidades:
9

Windows authentication mode: se utilizarn los
usuarios del sistema operativo (Windows) para inicio de
sesin en SQL Server.
Mixed Mode (SQL Server authentication and
Windows authentication): modo mixto, acceso con
usuarios de SQL Server y con usuarios del sistema
operativo.
En nuestro caso seleccionaremos "Mixd Mode" y en
"Specify the password for the SQL
Server system administrator (sa) account"introduciermos la
contrasea para el superusuario administrador de SQL Server
"sa". Es recomendable que sea una contrasea segura (con
nmeros, letras en maysculas y minsculas y algn carcter
especial) pues este usuario tiene permisos para realizar
cualquier accin en la base de datos.
En "Specify SQL Server administrators" podremos aadir los
usuarios que queramos que sean administradores del servidor
de SQL Server:

10

En la pestaa "Data Directories" podremso elegir los
directorios de instalacin de cada elemento (directorio de
usuario, log, temporal, backup, etc.):

Marcaremos el check "Send Windows and SQL Server
Error Reports to Microsoft or your corporate report server. Thi
s settings only applies toservices that run without user interati
ons" si queremos enviar reportes automticos de errores a
Microsoft. Pulsaremos "Next" para continuar:
11


Se iniciar el proceso de instalacin de Microsoft SQL Server
2008 R2 Express:

12

Una vez finalizado el proceso, puede que nos indique que
tenemos que reiniciar el equipo, con el mensaje
"One or more affected files haveoperations pendins. You must
restart your computer to complete this process". Pulsaremos
"OK":

Nos mostrar la ventana con el resultado de la instalacin de
SQL Server 2008 R2 Express. Pulsaremos "Close":




13

Administracin de Microsoft SQL Server
2008 R2 Express
Una vez instalado SQL Server 2008 R2 Express, podremos
acceder a la administracin desde el botn "Iniciar" - "Todos
los programas" - "Microsoft SQL Server 2008 R2" - "SQL
Server Management Studio":

En el primer inicio de SQL Server Management Studio nos
mostrar esta ventana con el progreso de la preparacin de
esta herramienta:

Introduciremos los siguientes datos en la ventana de conexin
al servidor de Microsoft SQL Server 2008 R2:
Server type: seleccionaremos "Database Engine".
Server name: introduremos el nombre de red del
equipo (hosname) o IP, una barra invertida y el nombre
14

de la instancia de SQL Server, en nuestro caso
"SQLExpress2008".
Authentication: elegiremos el tipo de autenticacin,
bien la de Windows o bien la de SQL Server (segn las
opciones seleccionadas en la instalacin). En nuestro
caso seleccionaremos "Windows Authentication".

Si tenemos algn cortafuegos o firewall deberemos abrir los
puertos necesarios correspondientes (el 1433 por defecto):

15

Y accederemos a Microsoft SQL Server Management
Studio, desde donde podremos administrar y
configurar Microsoft SQL Server 2008 R2 Express:


Crear una nueva base de datos para nuestras aplicaciones
de gestin (facturacin, contabilidad, rrhh)
Accederemos a Microsoft SQL Server Management Studio,
sobre "Databases" pulsaremos con el botn derecho del ratn
y seleccionaremos "New Database":
16


Introduciremos en "Database name" el nombre de la base de
datos, en nuestro caso "bdajpdsoft", podremos personalizar
los ficheros de datos (nombre, ubicacin y tamao, en
"Database files"), las opciones de seguridad (qu usuarios
sern propietarios en "Owner"), etc:

17

El script para generar la base de datos (pulsando en el botn
"Script") nos lo generar, podremos usarlo para crear una
base de datos en modo comando o para crear varias bases de
datos de forma rpida:
CREATE DATABASE [bdajpdsoft] ON PRIMARY
( NAME = N'bdajpdsoft', FILENAME = N'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\bdajpdsoft.mdf' , SIZE = 3072KB
, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'bdajpdsoft_log', FILENAME = N'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\bdajpdsoft_log.ldf' , SIZE =
1024KB , FILEGROWTH = 10%)
GO
ALTER DATABASE [bdajpdsoft] SET COMPATIBILITY_LEVEL = 100
GO
ALTER DATABASE [bdajpdsoft] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [bdajpdsoft] SET ANSI_NULLS OFF
GO
ALTER DATABASE [bdajpdsoft] SET ANSI_PADDING OFF
GO
ALTER DATABASE [bdajpdsoft] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [bdajpdsoft] SET ARITHABORT OFF
GO
ALTER DATABASE [bdajpdsoft] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [bdajpdsoft] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [bdajpdsoft] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [bdajpdsoft] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [bdajpdsoft] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [bdajpdsoft] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [bdajpdsoft] SET CONCAT_NULL_YIELDS_NULL OFF
GO
18

ALTER DATABASE [bdajpdsoft] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [bdajpdsoft] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [bdajpdsoft] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [bdajpdsoft] SET DISABLE_BROKER
GO
ALTER DATABASE [bdajpdsoft] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [bdajpdsoft] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [bdajpdsoft] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [bdajpdsoft] SET READ_WRITE
GO
ALTER DATABASE [bdajpdsoft] SET RECOVERY SIMPLE
GO
ALTER DATABASE [bdajpdsoft] SET MULTI_USER
GO
ALTER DATABASE [bdajpdsoft] SET PAGE_VERIFY CHECKSUM
GO
USE [bdajpdsoft]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1
AND name = N'PRIMARY') ALTER DATABASE [bdajpdsoft] MODIFY FILEGROUP
[PRIMARY] DEFAULT
GO

Crear una tabla en una base de datos SQL Server 2008 R2
desde Microsoft SQL Server Management Studio
Desplegaremos la base de datos creada en "Databases",
desplegaremos "bdajpdsoft" (es el nombre que le hemos dado
a la base de datos para nuestras aplicaciones de gestin
(contabilidad, facturacin, recursos humanos, etc.), en
"Tables" pulsaremos con el botn derecho del ratn y
seleccionaremos "New Table":
19


Iremos aadiendo en la parte derecha todos los campos que
deseemos para la tabla "clientes", por ejemplo:
Crearemos un campo llamado "codigo" que ser clave
primaria (primary key) y ser autoincremento. Para
ello en "Column Name" introduciremos "codigo", en
"Data Type" seleccioanremos "int", en
"Column Properties", en "Identity Specification", en
"(Is Identity") seleccionaremos "Yes", en
"Identity Increment" introduciremos "1" (ser el factor
de incremento) y en "Identity Seed" introduciremos "1",
ser desde donde empezar el autoincremento:
20


Para que el campo sea clave primaria (primary key),
pulsaremos con el botn derecho del ratn y seleccionaremos
"Set Primary Key":

21

Crearemos un campo llamado "cif", de tipo
"nvarchar(15)", este campo no podr ser nulo por lo que
desmarcaremos "Allow Nulls":

Adems, crearemos un ndice para este campo, de forma que
sea nico (que no se puedan repetir dos registros con el
mismo valor), para ello pulsaremos con el botn derecho
sobre la columna "cif", seleccionaremos "Indexes/Keys":
22


En la ventana de "Indexes/Keys" aparecer ya creado el
ndice para la clave primaria del campo "codigo", pulsaremos
"Add" para crear un nuevo ndice e introduciremos los
siguientes datos:
En "General", en "Columns" seleccionaremos "cif".
En "General", en "Is Unique" seleccionaremos
"Yes".
En "Identity", en "(Name)" introduciremos un
nombre para el ndice, por ejemplo: "ix_cliente_cif".
Pulsaremos "Close" para cerrar la ventana de Indexes/Keys y
guardar el nuevo ndice creado:
23


Crearemos el resto de los campos de la misma forma que lo
hemos hecho para el "codigo" y el "cif", antes de guardar la
tabla deberemos indicar un nombre para ella, en la parte
derecha, en "Properties", en "Identity", en "(Name)"
introduciremos el nombre para la tabla, en nuestro caso
"cliente":

Pulsaremos el botn "Save" para crear la tabla con los
campos y propiedades indicados:
24


El script que generara esta tabla:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.cliente
(
codigo int NOT NULL IDENTITY (1, 1),
cif nvarchar(15) NOT NULL,
nombre nvarchar(150) NOT NULL,
fechaalta date NULL,
email nchar(100) NULL,
web nchar(100) NULL,
direccion nchar(200) NULL,
observacion ntext NULL
) ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.cliente ADD CONSTRAINT
pk_cliente_codigo PRIMARY KEY CLUSTERED
(
25

codigo
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE UNIQUE NONCLUSTERED INDEX ix_cliente_cif ON dbo.cliente
(
cif
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE dbo.cliente SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
Ya tendremos preparado Microsoft SQL Server para ser usado
por cualquier aplicacin y guardar datos en la tabla "cliente"
de la base de datos "bdajpdsoft".


26

Configurar Microsoft SQL Server para permitir conexiones
remotas o acceso externo
Si queremos que desde otros equipos de la red o incluso
desde otros equipos de Internet haya acceso a este servidor
con SQL Server deberemos seguir los pasos que a
continuacin detallamos para activar las conexiones remotas
o acceso externo a SQL Server.
Accederemos al botn "Iniciar", en programas accederemos a
"Microsoft SQL Server 2008 R2" - "Configuration Tools" - "SQL
ServerConfiguration Manager" y seleccionaremos en la parte
izquierda "SQL Server Services". En la parte derecha nos
mostrar los tres servicios de SQL Server 2008 R2 Express:
SQL Server (SQLEXPRESS).
SQL Server Agent (SQKEXORESS).
SQL Server Browser.
De los tres servicios deben estar iniciados SQL Server y SQL
Server Browser, si no lo estn pulsaremos con el botn
derecho del ratn y seleccionaremos "Start". Adems, deben
estar con el tipo de inicio automtico, para que se inicien de
forma automtica cada vez que reiniciemos o arranquemos el
equipo. Para configurar el tipo de inicio pulsaremos con el
botn derecho del ratn sobre el
servicio,seleccioanremos "Propiedades":

27

En la pestaa "Service", en "Start Mode", seleccionaremos
"Automatic":

A continuacin activaremos el mtodo de conexin TCP/IP,
para ello accederemos (en la parte izquierda) a "SQL Server
NetworkConfiguration", seleccionaremos
"Protocols for SQLEXPRESS", pulsaremos en la parte derecha
con el botn derecho del ratn sobre "TCP/IP" y
seleccionaremos "Enable":

Nos mostrar un mensaje indicando que el cambio se aplicar
una vez reiniciado el servicio de SQL Server, podremos
reiniciarlo desde "SQL Server Services", pulsando con el botn
derecho del ratn sobre "SQL Server" y seleccionando
"Restart":
28


Ahora, abriremos Microsoft SQL Server Management Studio,
nos conectaremos al servidor, pulsaremos con el botn
derecho del ratn sobre el nombre de la instancia de SQL
Server a configurar (la de defecto ser
"nombre_equipo/sqlexpress", en el men emergente
seleccionaremos "Propiedades":

29

En la parte izquierda seleccionaremos la pgina
"Connections", en la parte derecha nos aseguraremos de que
est marcado "Allow remoteconnections to this server" y que
en "Maximum number of concurrent connections tengamos 0
(ilimitadas) o mayor que uno (para permitir las que
queramos):

En la pgina "Security", es recomendable (aunque depender
de las aplicaciones de gestin y dems de nuestra
organizacin que usen SQL Server) marcar "SQL Server and
Windows Authentication mode". Este modo es casi necesario
en situaciones donde queremos permitir el acceso a
aplicaciones externas a nuestra organizacin a travs de
Internet. Pues si dejamos nicamente el modo
"Windows Authenticationmode", obligaremos a que el acceso
slo se permitir a usuarios que pertenezcan al mismo
dominio Windows que donde tengamos instalado SQL Server,
en este caso slo se permitiran acceso a equipos que
pertenezcan al dominio. Por ello, para el caso de acceso
externo a nuestro servidor SQL Server es recomendable
marcar "SQL Server and Windows Authentication mode", as,
30

las aplicaciones externas a nuestra red (o las de nuestra
propia red) podrn acceder a SQL Serve con un usuario de
ste, sin necesidad de pertenecer a nuestro dominio Windows.
Por supuesto, en ambos casos, deberemos tener usuarios con
contraseas seguras (nmeros, letras maysculas y
minsculas y algn carcter especial), para evitar posibles
"robos" de contraseas mediante fuerza bruta u otros
mtodos. Adems, es recomendable seguir una poltica de
caducidad y complejidad de contraseas adecuada:

Y por ltimo, si tenemos algn cortafuegos o firewall en el
equipo servidor o en la red, deberemos abrir el puerto 1433
(de defecto) para SQL Server. Y si queremos que los equipos
de Internet accedan a nuestro servidor de SQL Server, si
tenemos un router o cortafuegos, deberemosredireccionar o
mapear el puerto 1433 a la IP del equipo con SQL Server.


31

Configurar y programar copias de seguridad de Microsoft
SQL Server 2008 R2
Crear dispositivo para copias de seguridad SQL Server
En primer lugar daremos un nuevo dispositivo de alta, para
ello accederemos a Microsoft SQL Server Management
Studio, desplegaremos la rama "Server Objects",
seleccionaremos "Backup Devices", pulsaremos con el botn
derecho del ratn y seleccionaremos "New BackupDevice":

En "Device name" introduciremos el nombre que definir el
dispositivo, por ejemplo "Disco_D", si disponemos de una
unidad de cinta podremos seleccionarla en "Tape", sino
podremos hacer copia de seguridad a disco, para ello
seleccionaremos "File" e introduciremos una unidad y carpeta
de destino, o pulsaremos el botn "..." para seleccionarla:
32


Seleccionaremos la carpeta y fichero de destino de la copia de
seguridad de la base de datos Microsoft SQL Server 2008 R2
Express, en "Filename" introduciremos el nombre del fichero
de copia de seguridad, por ejemplo "backup_sql_server":
33


Tras seleccionar el destino en "Destination" y el nombre del
dispositivo en "Device name" pulsaremos en "OK":

34

A partir de ahora podremos usar este dispositivo,
diferencindolo con el nombre que le hemos asignado. El
script para crear el dispositivo desde la lnea de comandos:
USE [master]
GO
EXEC master.dbo.sp_addumpdevice @devtype = N'disk',
@logicalname = N'Disco_D', @physicalname =
N'D:/backup_sql_server'
GO

Realizar copia de seguridad (backup) de una base de datos SQL
Server desde Management Studio
Para hacer una copia de seguridad de una base de datos de
Microsoft SQL Server pulsaremos con el botn derecho del
ratn sobre el dispositivo creado y seleccionaremos "Back Up
a Database":

Seleccionaremos los siguientes datos de la pestaa "General":
35

Database: seleccionaremos la base de datos de la que
haremos copia de seguridad, en nuestro caso
"bdajpdsoft".
Backup type: seleccionaremos "Full" (copia completa) o "Differencial" (copia slo de los datos
modificados o nuevos).
Name: indicaremos un nombre para la copia de seguridad.
Backup set will expire: si queremos que la copia de
seguridad caduque y pueda ser reemplazada,
indicaremos aqu los das de validez.
Destination: seleccionaremos el destino de la copia
(Disk Tape), nos aparecer el dispositivo creado en el
paso anterior.

En la pestaa "Options" seleccionaremos:
Overwrite media: seleccionaremos el mtodo de
reemplazo de copias existentes:
36

o Back up to the existing media set: realizar la
copia en un medio existente, con las siguientes
posibilidades:
Append to the existing backup set: utilizar un
fichero o medio existente, si marcamos la opcin "Check media
set name and backup set expiration" comprobar si el contenido del fichero ha expirado
para reemplazar la parte expirada por los nuevos datos.
Overwrite all existing backup sets:
reemplazar los ficheros o medios existentes
con los nuevos.
o Back up to a new media set, and
erase all existing backup sets: realizar la copia de seguridad en
un nuevo fichero o medio y eliminar los existentes.
Reliability:
o Verify backup when finished: comprobar el
fichero o medio tras finalizar la copia de seguridad.
o Perform checksum before writing to media:
realizar una comprobacin de checksum antes de
realizar la copia de seguridad.
o Continue on error: continuar con la copia de
seguridad aunque se produzca algn error.
Compression: seleccionaremos el mtodo de
compresin, ha de permitirlo el dispositivo (por
hardware) o el servidor por software, de lo contrario, si
seleccionaremos "Compress backup" y no es posible dar
un error como este.
Una vez seleccionadas las opciones de configuracin para la
copia de seguridad, pulsaremos "OK" para iniciar el proceso
de copia de seguridad:
37


Tras la finalizacin de la copia de seguridad, nos mostrar un
mensaje como el siguiente:

Con el texto:
Microsoft SQL Server Management Studio
The backup of database "bdajpdsoft" completed successfully
Nos habr creado un fichero en la unidad indicada con la
copia de seguridad de la base de datos elegida:
38


El script para ejecutar la copia de seguridad de la base de
datos desde la lnea de comandos:
BACKUP DATABASE [bdajpdsoft] TO [Disco_D] WITH DESCRIPTION
= N'Backup bdajpdsoft - Completa', NOFORMAT, INIT, NAME = N'Backupbdajpdsoft -
Completa', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO

Programar copias de seguridad automticas de SQL Server 2008
R2
Es probable que necesitemos activar la conexin remota a
Microsoft SQL Server 2008 R2, sobre todo si la copia de
seguridad la vamos a realizar desde un equipo de la red
diferente del servidor de SQL Server.
En primer lugar crearemos un fichero de proceso por lotes
.bat con el siguiente contenido (se puede usar cualquier editor
de texto plano como el Notepad):
osql -S "PCALONSO\SQLEXPRESS" -U sa -P xxx -Q "BACKUP DATABASE
[bdajpdsoft] TO [Disco_D] WITH DESCRIPTION = N'Backup bdajpdsoft- Completa',
NOFORMAT, INIT, NAME = N'Backup bdajpdsoft - Completa', SKIP, NOREWIND,
NOUNLOAD, STATS = 10"
Donde:
39

PCALONSO\SQLEXPRESS: "PCALONSO" es el
nombre del equipo en la red (hostname) o la
direccin IP y "SQLEXPRESS" es el nombre de la
instancia de SQL Server por defecto, en nuestro
caso, en la instalacin, pusimos el nombre
"SQLExpress2008".
"sa" y "xxx": "sa" nombre del usuario de SQL
Server con permisos suficientes para hacer copia en
la base de datos elegida, "xxx" es la contrasea de
este usuario. Nota importante: para que el
parmetro "-U" funcione, deben estar activo el tipo
de autenticacin mixto (Autenticacin de Windows y
autenticacin de SQL Server). Aqu explicamos
cmo cambiarlo. Si queremos dejar el mtodo de
autenticacin de Windows nicamente, deberemos
usar el parmetro -E, que usar el usuario del
sistema operativo que ha iniciado sesin.
"bdajpdsoft": nombre de la base de datos de la que
se har copia de seguridad.
"Disco_D": nombre del dispositivo (previamente
creado) que ser el destino de la copia de
seguridad. Aqu explicamos cmo crear un
dispositivo.
Nota: podremos aadir al final del script ">> resultado.log"
para guardar en un fichero el resultado de la ejecucin del
comando y as poder consultarlo posteriormente para verificar
que el comando se ejecuta correctamente.
Una vez creado el fichero backup_sql_server.bat (o el nombre
que queramos darle), abriremos el programador de tareas
de Microsoft Windows 7, desde el botn "Iniciar" - "Panel de
control" - "Herramients administrativas" - "Programador de
tareas". En la parte derecha, en "Acciones", pulsaremos en
"Crear tarea bsica":
40


Introduciremos un nombre para la tarea, por ejemplo
"Backup SQL Server" y una descripcin, por ejemplo "Copia
de seguridad de bdajpdsoftde Microsoft SQL Server 2008 R2
Express":

41

Seleccionaremos la periodicidad de la tarea, en nuestro caso
"Semanalmente":

Indicaremos los das de la semana y la hora de inicio de la
tarea de copia de seguridad de SQL Server:

42

En la accin a realizar por la tarea marcaremos "Iniciar un
programa":

Pulsaremos en "Examinar" en "Programa o script":

Accederemos a la unidad y carpeta donde hayamos guardado
el fichero .bat con el script para la copia, lo seleccionaremos,
en nuestro caso "backup_sql_server.bat" y pulsaremos
"Abrir":
43


Pulsaremos "Siguiente" una vez elegido el fichero a ejecutar:

Marcaremos "Abrir el dilogo Propiedades para esta tarea al
hacer clic en Finalizar" (necesario para establecer las opciones
de seguridad) y pulsaremos "Finalizar":
44


En la pestaa "General", marcaremos "Ejecutar tanto si el
usuario inici sesin como si no" (para que la copia de
seguridad se inicie aunque el usuario no haya iniciado sesin)
y marcaremos "Ejecutar con los privilegios ms altos".
Pulsaremos "Aceptar":

Nos pedir usuario y contrasea, es fundamental introducir
aqu un usuario y contrasea del equipo con permisos para
45

escritura en la carpeta de destino de la copia. En nuestro
caso, puesto que hemos elegido el mtodo de validacin con
usuario de SQL Server (en el script hemos utilizado el
parmetro -U "sa"), el usuario del sistema operativo no tiene
por qu ser administrador:

Una vez creada la tarea de copia de seguridad automtica de
Microsoft SQL Server 2008 R2, podremos ejecutarla para
realizar un test seleccionndola y pulsando el botn derecho
del ratn, haciendo clic en "Ejecutar":

Si todo es correcto, la tarea habr creado los ficheros, en la
carpeta o dispositivo de destino:
46

backup_sql_server: fichero binario con el contenido de la
copia de seguridad de SQL Server.
resultado.log: fichero con el resultado de la ejecucin del
comando, por ejemplo:
12 percent processed.
21 percent processed.
30 percent processed.
43 percent processed.
51 percent processed.
60 percent processed.
73 percent processed.
82 percent processed.
90 percent processed.
Processed 184 pages for database 'bdajpdsoft', file
'bdajpdsoft' on file 1.
100 percent processed.
Processed 1 pages for database 'bdajpdsoft', file
'bdajpdsoft_log' on file 1.
BACKUP
DATABASE successfully processed 185 pages in
0.293 seconds (4.932 MB/sec).
Tambin podremos ver el resultado de la tarea en el visor de
eventos o sucesos de Windows 7:
47


Con el
texto: Database backed up. Database: bdajpdsoft, creation da
te(time): 2010/07/25(21:38:45), pages dumped:
194, first LSN: 21:395:37, last LSN:
21:411:1, number of dump devices: 1, device information:
(FILE=1, TYPE=DISK:
{'Disco_D'}). This is an informationalmessage only.
No user action is required.
A partir de ahora se ejecutar la copia de lunes a viernes a las
22:00 horas (o la periodicidad que hayamos indicado).
Lgicamente, en nuestro caso hacemos copia al mismo equipo
donde est SQL Server y es MUY recomendable copiar en un
dispositivo de cinta o en otro equipo, por lo que deberamos
copiar el fichero resultante a otro equipo o a una unidad de
cinta.


48

Crear origen de datos ODBC de SQL Server
2008
En primer lugar, puesto que vamos a realizar una aplicacin
Delphi que acceda a Microsoft SQL Server 2008 R2
mediante ODBC, buscaremos y descargaremos de la web
oficial de Microsoft el complemento "Microsoft SQL Server
2008 Native Client", normalmente un fichero con el nombre
"sqlncli.msi".
Una vez instalado el ODBC de SQL Server: "Microsoft SQL
Server 2008 Native Client", accederemos al botn "Iniciar" -
"Panel de control" - "Herramientas administrativas" -
"Orgenes de datos ODBC". Si queremos que el origen de
datos ODBC est disponible slo para el usuario actual
pulsaremos en la pestaa "DSN de usuario", si queremos que
est disponible para todos los usuarios del equipo pulsaremos
en la pestaa "DSN de sistema". En esta pestaa pulsaremos
"Agregar":

Seleccionaremos el controlador para el origen de datos, en
nuestro caso "SQL Server Native Client 10.0":
49


Introduciremos los siguientes datos:
Name: el nombre del origen de datos, por ejemplo "bdsqlajpdsoft", este nombre ser el que
utilicemos en la aplicacin que desarrollemos.
Descripcion: introduciremos la descripcin para
identificar el origen de datos, por ejemplo "Conexin BD
SQL Server con Delphi".
Server: deberemos indicar la IP o nombre de red
(hostname) del equipo servidor de SQL Server y el
nombre de la instancia a la que nos conectaremos, por
ejemplo: PCALONSO\SQLEXPRESS, siendo "PCALONSO"
el nombre de red del equipo con SQL Server y
"SQLEXPRESS" el nombre de la instancia.

50

A continuacin indicaremos el tipo de conexin que
realizaremos (autenticacin):
"With Integrated Windows authentication": autenticacin
de Windows, el usuario y contrasea del sistema
operativo ser el usado para la validacin con SQL
Server.
"With SQL Server authentication using a login ID
and password entered by the user": validacin con un
usuario y contrasea de SQL Server. Esta ser la opcin
que elijamos nosotros, en "Login" introduciremos el
nombre del usuario de SQL Server con permisos
suficientes para las tareas que queramos realizar y en
"Password" la contrasea de este usuario.
Marcaremos la opcin "Connect to SQL
Server to obtain default settings for the additional configuratio
n options" y pulsaremos "Siguiente":

Marcaremos "Change the default database to" y
seleccionaremos la base de datos a la que nos conectaremos,
"bdajpdsoft":
51


Pulsaremos "Finalizar" para crear definitivamente el origen de
datos ODBC para SQL Server:

Tras la creacin nos mostrar una ventana con los datos
seleccionados:
52


Con el texto:
Microsoft SQL Server Native Client Version 10.50.1600
Data Source Name: bdsqlajpdsoft
Data Source Description: Conexin BD SQL Server con Delphi
Server: PCALONSO\SQLEXPRESS
Use Integrated Security: No
Database: bdajpdsoft
Language: Spanish
Data Encryption: No
Trust Server Certificate: No
Multiple Active Result Sets(MARS): No
Mirror Server:
Translate Character Data: Yes
Log Long Running Queries: No
Log Driver Statistics: No
Use Regional Settings: No
Use ANSI Quoted Identifiers: Yes
Use ANSI Null, Paddings and Warnings: Yes
En la ventana anterior podremos realizar un test de conexin
pulsando en "Test Data Source", si todo es correcto mostrar
algo as:
53


Con el texto:
Microsoft SQL Server Native Client Version 10.50.1600
Running connectivity tests...
Attempting connection
Connection established
Verifying option settings
Disconnecting from server
TESTS COMPLETED SUCCESSFULLY!


54

Acceso a base de datos Microsoft SQL
Server 2008 R2 Express mediante
Microsoft Access y ODBC
Una vez instalado y configurado el origen de datos ODBC de
SQL Server 2008 R2 Express, abriremos Microsoft Access
2007, seleccionaremos "Base de datos en blanco", en la parte
derecha, introduciremos el nombre del archivo .accdb de
Access 2007, por ejemplo: "AjpdSoft Acceso SQL
Server.accdb" y pulsaremos "Crear":

En la pestaa "Datos externos", pulsaremos el botn "Ms",
seleccionaremos "Bases de datos ODBC":
55


Marcaremos la opcin "Vincular al origen de datos creando
una tabla vinculada" (Access crear una tabla que mantendr
un vnculo a los datos de origen. Los cambios realizados en
los datos en Access se reflejarn en el origen y viceversa):

Como podemos observar, en el caso de Microsoft Windows 7 y
Microsoft Access 2007, no permite mostrar los orgenes de
datos de la pestaa DSN de sistema, por lo que si hemos
56

creado el origen de datos en esta pestaa no nos aparecer
para seleccionarlo. Incluso abriendo Microsoft Access como
administrador tampoco dejar seleccionar un origen de datos
de DSN de sistema. As pues, tendremos dos opciones:
1. Crear un origen de datos desde la ventana que muestra
Microsoft Access pulsando en "Nuevo" y siguiendo los
pasos explicados aqu.
2. Pulsando en la pestaa "Origen de datos de archivo" y
seleccionando o creando un archivo .dsn con un
contenido como el siguiente:
[ODBC]
DRIVER=SQL Server Native Client 10.0
UID=sa
DATABASE=bdajpdsoft
WSID=PCALONSO
APP=2007 Microsoft Office system
SERVER=PCALONSO\SQLEXPRESS
Description=Acceso ODBC SQL Server
Donde:
"sa" ser un usuario de SQL Server con permisos
suficientes para acceso a la base de datos
seleccionada.
"bdajpdsoft" ser el nombre de la base de datos de
SQL Server a la que se acceder.
"PCALONSO\SQLEXPRESS" ser el nombre del
servidor (hostname o IP) y el nombre de la
instancia de SQL Server a la que nos conectaremos.
El fichero .dsn se puede crear con un asistente, desde la
pestaa "Origen de datos de archivo" de la ventana siguiente:
57


Una vez seleccionado el origen de datos de SQL Server, nos
pedir la contrasea y el usuario (segn el tipo de
autenticacin que hayamos elegido):

58

A continuacin nos mostrar todas las tablas de la base de
datos SQL Server elegida, seleccionaremos las tablas que
queramos vincular con Access, en nuestro caso "dbo.cliente".
Si queremos que no nos vuelva a pedir contrasea en futuros
accesos marcaremso "Guardar contrasea":

Nos avisar de que la contrasea no se encriptar y ser
guardada en el fichero del origen de datos sin encriptar:

De esta forma ya tendremos acceso a las tablas seleccionadas
de SQL Server, desde Access podremos realizar cualquier
accin sobre ellas: hacer informes, aadir registros, modificar
registros, etc. Cualquier cambio realizado en Access quedar
guardado en SQL Server.
59




Algunos errores y su posible solucin
Error si se selecciona mtodo de compresin
en backup de SQL Server y el servidor no lo permite:
TITLE: Microsoft SQL Server Management Studio
------------------------------
Backup failed for Server 'pcalonso/sqlexpress'.
(Microsoft.SqlServer.SmoExtended)
For help, click:
http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Se
rver&ProdVer=10.50.1600.1+((KJ_RTM).100402-
1539+)&EvtSrc=Microsoft.SqlServer.Management.Smo.Excep
tionTemplates.FailedOperationExceptionText&EvtID=Backup+
Server&LinkId=20476
------------------------------
ADDITIONAL INFORMATION:
System.Data.SqlClient.SqlError: BACKUP DATABASE WITH
COMPRESSION is not supported on Express Edition with Adva
nced Services (64-bit). (Microsoft.SqlServer.Smo)
60

For help, click:
http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Se
rver&ProdVer=10.50.1600.1+((KJ_RTM).100402-
1539+)&LinkId=20476
------------------------------
BUTTONS:
OK
------------------------------

61

EJERCICIOS 1
1. Objetivos y alcances del tutorial de Microsoft Sql Server.
El curso brinda un concepto terico corto, luego un problema
resuelto que invito a ejecutar, modificar y jugar con el mismo. Por
ltimo, y lo ms importante, una serie de ejercicios propuestos que
nos permitir saber si podemos aplicar el concepto.
2. Crear una tabla (create table - sp_tables - sp_columns - drop table)
Primer problema:
Necesita almacenar los datos de sus amigos en una tabla. Los datos
que guardar sern: apellido, nombre, domicilio y telfono.
a. Elimine la tabla "agenda" si existe:
if object_id('agenda') is not null
drop table agenda;

b. Intente crear una tabla llamada "/agenda":
create table /agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);
aparece un mensaje de error porque usamos un caracter invlido
("/") para el nombre.

c. Cree una tabla llamada "agenda", debe tener los siguientes
campos: apellido, varchar(30); nombre, varchar(20); domicilio,
varchar (30) y telefono, varchar(11):
create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

d. Intente crearla nuevamente. Aparece mensaje de error.

e. Visualice las tablas existentes (sp_tables @table_owner='dbo').

f. Visualice la estructura de la tabla "agenda" (sp_columns).

g. Elimine la tabla.

h. Intente eliminar la tabla, sin controlar si existe. Debe aparecer
un mensaje de error.
62


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

create table /agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

sp_tables @table_owner='dbo';

sp_columns agenda;

drop table agenda;

drop table agenda;

Segundo problema:
Necesita almacenar informacin referente a los libros de su biblioteca
personal. Los datos que
guardar sern: ttulo del libro, nombre del autor y nombre de la
editorial.
a. Elimine la tabla "libros", si existe:
if object_id('libros') is not null
drop table libros;

b. Verifique que la tabla "libros" no existe en la base de datos
activa (sp_tables @table_owner='dbo').

63

c. Cree una tabla llamada "libros". Debe definirse con los
siguientes campos: titulo, varchar(20); autor, varchar(30) y
editorial, varchar(15).

d. Intente crearla nuevamente. Aparece mensaje de error.

e. Visualice las tablas existentes.

f. Visualice la estructura de la tabla "libros".

g. Elimine la tabla.

h. Intente eliminar la tabla nuevamente.

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

sp_tables @table_owner='dbo';

create table libros(
titulo varchar(20),
autor varchar(30),
editorial varchar(15)
);

create table libros(
titulo varchar(20),
autor varchar(30),
editorial varchar(15)
);

sp_tables @table_owner='dbo';

sp_columns libros;

drop table libros;

drop table libros;

3. Insertar y recuperar registros de una tabla (insert into - select)


Primer problema:
Trabaje con la tabla "agenda" que almacena informacin de sus amigos.
a. Elimine la tabla "agenda", si existe:
64

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

b. Cree una tabla llamada "agenda". Debe tener los siguientes
campos: apellido (cadena de 30), nombre (cadena de 20),
domicilio (cadena de 30) y telefono (cadena de 11):
c. Cree una tabla llamada "agenda". Debe tener los siguientes
campos: apellido (cadena de 30), nombre (cadena de 20),
domicilio (cadena de 30) y telefono (cadena de 11):
d. Visualice las tablas existentes para verificar la creacin de
"agenda"
(sp_tables @table_owner='dbo').

e. Visualice la estructura de la tabla "agenda" (sp_columns).

f. Ingrese los siguientes registros:
insert into agenda (apellido, nombre, domicilio, telefono)
values ('Moreno','Alberto','Colon 123','4234567');
insert into agenda (apellido,nombre, domicilio, telefono)
values ('Torres','Juan','Avellaneda 135','4458787');

g. Seleccione todos los registros de la tabla:
select * from agenda;

h. Elimine la tabla "agenda":
drop table agenda;

i. Intente eliminar la tabla nuevamente (aparece un mensaje de
error):
drop table agenda;

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

create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

sp_tables @table_owner='dbo';

sp_columns agenda;

65

insert into agenda (apellido, nombre, domicilio, telefono)
values ('Moreno','Alberto','Colon 123','4234567');
insert into agenda (apellido,nombre, domicilio, telefono)
values ('Torres','Juan','Avellaneda 135','4458787');

select * from agenda;

drop table agenda;

drop table agenda;

Segundo problema:
Trabaje con la tabla "libros" que almacena los datos de los libros de su
propia biblioteca.
a. Elimine la tabla "libros", si existe:
if object_id('libros') is not null
drop table libros;

b. Cree una tabla llamada "libros". Debe definirse con los
siguientes campos: titulo (cadena de 20), autor (cadena de 30)
y editorial (cadena de 15).

c. Visualice las tablas existentes (sp_tables @table_owner='dbo').

d. Visualice la estructura de la tabla "libros" (sp_columns).

e. Ingrese los siguientes registros:
insert into libros (titulo,autor,editorial)
values ('El aleph','Borges','Planeta');
insert into libros (titulo,autor,editorial)
values ('Martin Fierro','Jose Hernandez','Emece');
insert into libros (titulo,autor,editorial)
values ('Aprenda PHP','Mario Molina','Emece');

f. Muestre todos los registros (select).

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

create table libros (
titulo varchar(20),
autor varchar(30),
editorial varchar(15)
);

66

sp_tables @table_owner='dbo';

sp_columns libros;

insert into libros (titulo,autor,editorial)
values ('El aleph','Borges','Planeta');
insert into libros (titulo,autor,editorial)
values ('Martin Fierro','Jose Hernandez','Emece');
insert into libros (titulo,autor,editorial)
values ('Aprenda PHP','Mario Molina','Emece');

select * from libros;

4. Tipos de datos bsicos

Primer problema:
Un videoclub que alquila pelculas en video almacena la informacin de
sus pelculas en una tabla llamada "peliculas"; para cada pelcula
necesita los siguientes datos:
-nombre, cadena de caracteres de 20 de longitud,
-actor, cadena de caracteres de 20 de longitud,
-duracin, valor numrico entero.
-cantidad de copias: valor entero.

a. Elimine la tabla, si existe:
if object_id('peliculas')is not null
drop table peliculas;

b. Cree la tabla eligiendo el tipo de dato adecuado para cada
campo:
create table peliculas(
nombre varchar(20),
actor varchar(20),
duracion integer,
cantidad integer
);

c. Vea la estructura de la tabla:

d. Ingrese los siguientes registros:
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Mision imposible','Tom Cruise',128,3);
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Mision imposible 2','Tom Cruise',130,2);
insert into peliculas (nombre, actor, duracion, cantidad)
67

values ('Mujer bonita','Julia Roberts',118,3);
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Elsa y Fred','China Zorrilla',110,2);

e. Muestre todos los registros.

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

create table peliculas(
nombre varchar(20),
actor varchar(20),
duracion integer,
cantidad integer
);

sp_columns peliculas;

insert into peliculas (nombre, actor, duracion, cantidad)
values ('Mision imposible','Tom Cruise',128,3);
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Mision imposible 2','Tom Cruise',130,2);
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Mujer bonita','Julia Roberts',118,3);
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Elsa y Fred','China Zorrilla',110,2);

select *from peliculas;

Segundo problema:
Una empresa almacena los datos de sus empleados en una tabla
"empleados" que guarda los siguientes datos: nombre, documento,
sexo, domicilio, sueldobasico.

a. Elimine la tabla, si existe:
if object_id('empleados') is not null
drop table empleados;

b. Cree la tabla eligiendo el tipo de dato adecuado para cada
campo:
create table empleados(
nombre varchar(20),
documento varchar(8),
sexo varchar(1),
domicilio varchar(30),
sueldobasico float
68

);

c. Vea la estructura de la tabla:

d. Ingrese algunos registros:
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Juan Perez','22333444','m','Sarmiento 123',500);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Ana Acosta','24555666','f','Colon 134',650);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Bartolome Barrios','27888999','m','Urquiza 479',800);

a. Seleccione todos los registros.

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

create table empleados(
nombre varchar(20),
documento varchar(8),
sexo varchar(1),
domicilio varchar(30),
sueldobasico float
);

sp_columns empleados;

insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Juan Perez','22333444','m','Sarmiento 123',500);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Ana Acosta','24555666','f','Colon 134',650);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Bartolome Barrios','27888999','m','Urquiza 479',800);

select *from empleados;


5. Recuperar algunos campos (select)

Primer problema:
Un videoclub que alquila pelculas en video almacena la informacin de
sus pelculas en alquiler en una tabla llamada "peliculas".

a. Elimine la tabla, si existe:
if object_id('peliculas') is not null
drop table peliculas;
69


b. Cree la tabla:
create table peliculas(
titulo varchar(20),
actor varchar(20),
duracion integer,
cantidad integer
);

c. Vea la estructura de la tabla (sp_columns).

d. Ingrese alos siguientes registros:
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible','Tom Cruise',180,3);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible 2','Tom Cruise',190,2);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mujer bonita','Julia Roberts',118,3);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Elsa y Fred','China Zorrilla',110,2);

e. Realice un "select" mostrando solamente el ttulo y actor de
todas las pelculas

f. Muestre el ttulo y duracin de todas las peliculas

g. Muestre el ttulo y la cantidad de copias

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

create table peliculas(
titulo varchar(20),
actor varchar(20),
duracion integer,
cantidad integer
);

sp_columns peliculas;

insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible','Tom Cruise',180,3);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible 2','Tom Cruise',190,2);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mujer bonita','Julia Roberts',118,3);
70

insert into peliculas (titulo, actor, duracion, cantidad)
values ('Elsa y Fred','China Zorrilla',110,2);

select titulo,actor from peliculas;

select titulo,duracion from peliculas;

select titulo,cantidad from peliculas;


Segundo problema:
Una empresa almacena los datos de sus empleados en una tabla
llamada "empleados".

a. Elimine la tabla, si existe:
if object_id('empleados') is not null
drop table empleados;

b. Cree la tabla:
create table empleados(
nombre varchar(20),
documento varchar(8),
sexo varchar(1),
domicilio varchar(30),
sueldobasico float
);

c. Vea la estructura de la tabla:
sp_columns empleados;

d. Ingrese algunos registros:
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Juan Juarez','22333444','m','Sarmiento 123',500);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Ana Acosta','27888999','f','Colon 134',700);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Carlos Caseres','31222333','m','Urquiza 479',850);

e. Muestre todos los datos de los empleados

f. Muestre el nombre, documento y domicilio de los empleados

g. Realice un "select" mostrando el documento, sexo y sueldo
bsico de todos los empleados

71

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

create table empleados(
nombre varchar(20),
documento varchar(8),
sexo varchar(1),
domicilio varchar(30),
sueldobasico float
);

sp_columns empleados;

insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Juan Juarez','22333444','m','Sarmiento 123',500);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Ana Acosta','27888999','f','Colon 134',700);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Carlos Caseres','31222333','m','Urquiza 479',850);

select *from empleados;

select nombre,documento,domicilio from empleados;

select documento,sexo,sueldobasico from empleados;

6. Recuperar algunos registros (where)

Primer problema:
Trabaje con la tabla "agenda" en la que registra los datos de sus
amigos.

a. Elimine "agenda", si existe:
if object_id('agenda') is not null
drop table agenda;

b. Cree la tabla, con los siguientes campos: apellido (cadena de
30), nombre (cadena de 20), domicilio (cadena de 30) y
telefono (cadena de 11).

c. Visualice la estructura de la tabla "agenda".

d. Ingrese los siguientes registros:
Acosta, Ana, Colon 123, 4234567;
Bustamante, Betina, Avellaneda 135, 4458787;
Lopez, Hector, Salta 545, 4887788;
72

Lopez, Luis, Urquiza 333, 4545454;
Lopez, Marisa, Urquiza 333, 4545454.

e. Seleccione todos los registros de la tabla

f. Seleccione el registro cuyo nombre sea "Marisa" (1 registro)

g. Seleccione los nombres y domicilios de quienes tengan apellido
igual a "Lopez" (3 registros)

h. Muestre el nombre de quienes tengan el telfono "4545454" (2
registros)

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

create table agenda (
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

sp_columns agenda;

insert into agenda(apellido,nombre,domicilio,telefono) values
('Acosta', 'Ana', 'Colon 123', '4234567');

insert into agenda(apellido,nombre,domicilio,telefono) values
('Bustamante', 'Betina', 'Avellaneda 135', '4458787');

insert into agenda(apellido,nombre,domicilio,telefono) values
('Lopez', 'Hector', 'Salta 545', '4887788');
insert into agenda(apellido,nombre,domicilio,telefono) values
('Lopez', 'Luis', 'Urquiza 333', '4545454');
insert into agenda(apellido,nombre,domicilio,telefono) values
('Lopez', 'Marisa', 'Urquiza 333', '4545454');

select *from agenda;

select *from agenda
where nombre='Marisa';

select nombre,domicilio from agenda
where apellido='Lopez';

73

select nombre from agenda
where telefono='4545454';

Segundo problema:
Trabaje con la tabla "libros" de una librera que guarda informacin
referente a sus libros disponibles para la venta.

a. Elimine la tabla si existe.

b. Cree la tabla "libros". Debe tener la siguiente estructura:
create table libros (
titulo varchar(20),
autor varchar(30),
editorial varchar(15));

c. Visualice la estructura de la tabla "libros".

d. Ingrese los siguientes registros:
El aleph,Borges,Emece;
Martin Fierro,Jose Hernandez,Emece;
Martin Fierro,Jose Hernandez,Planeta;
Aprenda PHP,Mario Molina,Siglo XXI;

e. Seleccione los registros cuyo autor sea "Borges" (1 registro)

f. Seleccione los ttulos de los libros cuya editorial sea "Emece" (2
registros)

g. Seleccione los nombres de las editoriales de los libros cuyo titulo
sea "Martin Fierro" (2 registros)

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

create table libros (
titulo varchar(20),
autor varchar(30),
editorial varchar(15)
);

sp_columns libros;

insert into libros(titulo,autor,editorial) values
('El aleph','Borges','Emece');
insert into libros(titulo,autor,editorial) values
74

('Martin Fierro','Jose Hernandez','Emece');
insert into libros(titulo,autor,editorial) values
('Martin Fierro','Jose Hernandez','Planeta');
insert into libros(titulo,autor,editorial) values
('Aprenda PHP','Mario Molina','Siglo XXI');

select *from libros
where autor='Borges';

select titulo from libros
where editorial='Emece';

select editorial from libros
where titulo='Martin Fierro';

7. Operadores relacionales

Primer problema:
Un comercio que vende artculos de computacin registra los datos de
sus artculos en una tabla con ese nombre.

a. Elimine "articulos", si existe:
if object_id('articulos') is not null
drop table articulos;

b. Cree la tabla, con la siguiente estructura:
create table articulos(
codigo integer,
nombre varchar(20),
descripcion varchar(30),
precio float,
cantidad integer
);

c. Vea la estructura de la tabla (sp_columns).

d. Ingrese algunos registros:
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (1,'impresora','Epson Stylus C45',400.80,20);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (2,'impresora','Epson Stylus C85',500,30);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (3,'monitor','Samsung 14',800,10);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (4,'teclado','ingles Biswal',100,50);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
75

values (5,'teclado','espaol Biswal',90,50);

e. Seleccione los datos de las impresoras (2 registros)

f. Seleccione los artculos cuyo precio sea mayor o igual a 400 (3
registros)

g. Seleccione el cdigo y nombre de los artculos cuya cantidad sea
menor a 30 (2 registros)

h. Selecciones el nombre y descripcin de los artculos que NO
cuesten $100 (4 registros)

Segundo problema:
Un video club que alquila pelculas en video almacena la informacin de
sus pelculas en alquiler en una tabla denominada "peliculas".

a. Elimine la tabla, si existe.

b. Cree la tabla eligiendo el tipo de dato adecuado para cada
campo:
create table peliculas(
titulo varchar(20),
actor varchar(20),
duracion integer,
cantidad integer
);

c. Ingrese los siguientes registros:
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible','Tom Cruise',120,3);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible 2','Tom Cruise',180,4);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mujer bonita','Julia R.',90,1);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Elsa y Fred','China Zorrilla',80,2);

d. Seleccione las pelculas cuya duracin no supere los 90 minutos
(2 registros)

e. Seleccione el ttulo de todas las pelculas en las que el actor NO
sea "Tom Cruise" (2 registros)

76

f. Muestre todos los campos, excepto "duracion", de todas las
pelculas de las que haya ms de 2 copias (2 registros)

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

create table peliculas(
titulo varchar(20),
actor varchar(20),
duracion integer,
cantidad integer
);

insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible','Tom Cruise',120,3);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible 2','Tom Cruise',180,4);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mujer bonita','Julia R.',90,1);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Elsa y Fred','China Zorrilla',80,2);

select *from peliculas
where duracion<=90;

select *from peliculas
where actor<>'Tom Cruise';

select titulo,actor,cantidad
from peliculas
where cantidad >2;

8. Borrar registros (delete)


Primer problema:
Trabaje con la tabla "agenda" que registra la informacin referente a sus
amigos.

a. Elimine la tabla si existe:
if object_id('agenda') is not null
drop table agenda;

b. Cree la tabla con los siguientes campos: apellido (cadena de
30), nombre (cadena de 20),
77

domicilio (cadena de 30) y telefono (cadena de 11):
create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

c. Ingrese los siguientes registros (insert into):
Alvarez,Alberto,Colon 123,4234567,
Juarez,Juan,Avellaneda 135,4458787,
Lopez,Maria,Urquiza 333,4545454,
Lopez,Jose,Urquiza 333,4545454,
Salas,Susana,Gral. Paz 1234,4123456.

d. Elimine el registro cuyo nombre sea "Juan" (1 registro afectado)

e. Elimine los registros cuyo nmero telefnico sea igual a
"4545454" (2 registros afectados):

f. Elimine todos los registros (2 registros afectados):

g. Muestre la tabla.

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

create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

insert into agenda (apellido,nombre,domicilio,telefono)
values('Alvarez','Alberto','Colon 123','4234567');
insert into agenda (apellido,nombre,domicilio,telefono)
values('Juarez','Juan','Avellaneda 135','4458787');
insert into agenda (apellido,nombre,domicilio,telefono)
values('Lopez','Maria','Urquiza 333','4545454');
insert into agenda (apellido,nombre,domicilio,telefono)
values('Lopez','Jose','Urquiza 333','4545454');
insert into agenda (apellido,nombre,domicilio,telefono)
values('Salas','Susana','Gral. Paz 1234','4123456');

78

delete from agenda
where nombre='Juan';

delete from agenda
where telefono='4545454';

select * from agenda;

delete from agenda;

select * from agenda;

Segundo problema:
Un comercio que vende artculos de computacin registra los datos de
sus artculos en una tabla con
ese nombre.

a. Elimine "articulos", si existe:
if object_id('articulos') is not null
drop table articulos;

b. Cree la tabla, con la siguiente estructura:
create table articulos(
codigo integer,
nombre varchar(20),
descripcion varchar(30),
precio float,
cantidad integer
);

c. Vea la estructura de la tabla.

d. Ingrese algunos registros:
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (1,'impresora','Epson Stylus C45',400.80,20);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (2,'impresora','Epson Stylus C85',500,30);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (3,'monitor','Samsung 14',800,10);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (4,'teclado','ingles Biswal',100,50);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (5,'teclado','espaol Biswal',90,50);

e. Elimine los artculos cuyo precio sea mayor o igual a 500 (2
registros)
79

delete from articulos
where precio>=500;

f. Elimine todas las impresoras (1 registro)
delete from articulos
where nombre='impresora';

g. Elimine todos los artculos cuyo cdigo sea diferente a 4 (1
registro)
delete from articulos
where codigo<>4;

h. Mostrar la tabla despus que borra cada registro.

9. Actualizar registros (update)


Primer problema:
Trabaje con la tabla "agenda" que almacena los datos de sus amigos.

a. Elimine la tabla si existe:
if object_id('agenda') is not null
drop table agenda;

b. Cree la tabla:
create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

c. Ingrese los siguientes registros (1 registro actualizado):
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Acosta','Alberto','Colon 123','4234567');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Juarez','Juan','Avellaneda 135','4458787');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Lopez','Maria','Urquiza 333','4545454');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Lopez','Jose','Urquiza 333','4545454');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Suarez','Susana','Gral. Paz 1234','4123456');

80

d. Modifique el registro cuyo nombre sea "Juan" por "Juan Jose" (1
registro afectado)

e. Actualice los registros cuyo nmero telefnico sea igual a
"4545454" por "4445566" (2 registros afectados)

f. Actualice los registros que tengan en el campo "nombre" el valor
"Juan" por "Juan Jose" (ningn registro afectado porque ninguno
cumple con la condicin del "where")

g. Luego de cada actualizacin ejecute un select que muestre todos
los registros de la tabla.

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

create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

insert into agenda (apellido,nombre,domicilio,telefono)
values ('Acosta','Alberto','Colon 123','4234567');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Juarez','Juan','Avellaneda 135','4458787');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Lopez','Maria','Urquiza 333','4545454');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Lopez','Jose','Urquiza 333','4545454');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Suarez','Susana','Gral. Paz 1234','4123456');

select * from agenda;

update agenda set nombre='Juan Jose'
where nombre='Juan';

select * from agenda;

update agenda set telefono='4445566'
where telefono='4545454';

select * from agenda;

81

update agenda set nombre='Juan Jose'
where nombre='Juan';

select * from agenda;

Segundo problema:
Trabaje con la tabla "libros" de una librera.

a. Elimine la tabla si existe:
if object_id('libros') is not null
drop table libros;

b. Crela con los siguientes campos: titulo (cadena de 30
caracteres de longitud), autor (cadena de 20), editorial (cadena
de 15) y precio (float):
create table libros (
titulo varchar(30),
autor varchar(20),
editorial varchar(15),
precio float
);

c. Ingrese los siguientes registros:
insert into libros (titulo, autor, editorial, precio)
values ('El aleph','Borges','Emece',25.00);
insert into libros (titulo, autor, editorial, precio)
values ('Martin Fierro','Jose Hernandez','Planeta',35.50);
insert into libros (titulo, autor, editorial, precio)
values ('Aprenda PHP','Mario Molina','Emece',45.50);
insert into libros (titulo, autor, editorial, precio)
values ('Cervantes y el quijote','Borges','Emece',25);
insert into libros (titulo, autor, editorial, precio)
values ('Matematica estas ahi','Paenza','Siglo XXI',15);

d. Muestre todos los registros (5 registros):
select *from libros;

e. Modifique los registros cuyo autor sea igual a "Paenza", por
"Adrian Paenza" (1 registro afectado)
update libros set autor='Adrian Paenza'
where autor='Paenza';

f. Nuevamente, modifique los registros cuyo autor sea igual a
"Paenza", por "Adrian Paenza" (ningn registro afectado porque
ninguno cumple la condicin)
82

update libros set autor='Adrian Paenza'
where autor='Paenza';

g. Actualice el precio del libro de "Mario Molina" a 27 pesos (1
registro afectado):
update libros set precio=27
where autor='Mario Molina';

h. Actualice el valor del campo "editorial" por "Emece S.A.", para
todos los registros cuya editorial sea igual a "Emece" (3
registros afectados):
update libros set editorial='Emece S.A.'
where editorial='Emece';

i. Luego de cada actualizacin ejecute un select que mustre todos
los registros de la tabla.

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

create table libros (
titulo varchar(30),
autor varchar(20),
editorial varchar(15),
precio float
);

insert into libros (titulo, autor, editorial, precio)
values ('El aleph','Borges','Emece',25.00);
insert into libros (titulo, autor, editorial, precio)
values ('Martin Fierro','Jose Hernandez','Planeta',35.50);
insert into libros (titulo, autor, editorial, precio)
values ('Aprenda PHP','Mario Molina','Emece',45.50);
insert into libros (titulo, autor, editorial, precio)
values ('Cervantes y el quijote','Borges','Emece',25);
insert into libros (titulo, autor, editorial, precio)
values ('Matematica estas ahi','Paenza','Siglo XXI',15);

select * from libros;

update libros set autor='Adrian Paenza'
where autor='Paenza';

select * from libros;

update libros set autor='Adrian Paenza'
83

where autor='Paenza';

select * from libros;

update libros set precio=27
where autor='Mario Molina';

select * from libros;

update libros set editorial='Emece S.A.'
where editorial='Emece';

select * from libros;

10. Comentarios


Problema:
Trabajamos con la tabla "libros" que almacena los datos de los libros de
una librera.
Eliminamos la tabla, si existe:
if object_id('libros') is not null
drop table libros;
Creamos la tabla:
create table libros(
titulo varchar(30),
autor varchar(20),
editorial varchar(15)
);
Agregamos un registro:
insert into libros (titulo,autor,editorial)
values ('El aleph','Borges','Emece');
Mostramos todos los libros y agregamos un comentario de linea:

select * from libros --mostramos los registros de libros; vamos a
mostrar el ttulo y autor de todos los libros y agregamos un bloque de
comentarios:
select titulo, autor
/*mostramos ttulos y
nombres de los autores*/
from libros;
Note que lo que est entre los smbolos no se ejecuta.
if object_id('libros') is not null
drop table libros;

create table libros(
84

titulo varchar(30),
autor varchar(20),
editorial varchar(15)
);

insert into libros (titulo,autor,editorial)
values ('El aleph','Borges','Emece');

select * from libros --mostramos los registros de libros;

select titulo, autor
/*mostramos ttulos y
nombres de los autores*/
from libros;


EJERCICIOS 2
11. Valores null (is null)
Primer problema:
Una farmacia guarda informacin referente a sus medicamentos en una
tabla llamada "medicamentos".
a. Elimine la tabla, si existe:
if object_id('medicamentos') is not null
drop table medicamentos;

b. Cree la tabla con la siguiente estructura:
create table medicamentos(
codigo integer not null,
nombre varchar(20) not null,
laboratorio varchar(20),
precio float,
cantidad integer not null
);

c. Visualice la estructura de la tabla "medicamentos":
sp_columns medicamentos; note que los campos "codigo",
"nombre" y "cantidad", en la columna "IS_NULLABLE" aparece
"NO" y en las otras "YES".

d. Ingrese algunos registros con valores "null" para los campos que
lo admitan:
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(1,'Sertal gotas',null,null,100);
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
85

values(2,'Sertal compuesto',null,8.90,150);
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(3,'Buscapina','Roche',null,200);

e. Vea todos los registros:
select *from medicamentos;

f. Ingrese un registro con valor "0" para el precio y cadena vaca
para el laboratorio:
insert into medicamentos (codigo,nombre, laboratorio,precio,cantidad)
values(4,'Bayaspirina','',0,150);

g. Ingrese un registro con valor "0" para el cdigo y cantidad y
cadena vaca para el nombre:
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(0,'','Bayer',15.60,0);

h. Muestre todos los registros:
select *from medicamentos;

i. Intente ingresar un registro con valor nulo para un campo que
no lo admite (aparece un mensaje de error):
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(null,'Amoxidal jarabe','Bayer',25,120);

j. Recupere los registros que contengan valor "null" en el campo
"laboratorio", luego los que tengan una cadena vaca en el
mismo campo. Note que el resultado es diferente.

k. Recupere los registros que contengan valor "null" en el campo
"precio", luego los que tengan el valor 0 en el mismo campo.
Note que el resultado es distinto.

l. Recupere los registros cuyo laboratorio no contenga una cadena
vaca, luego los que sean distintos de "null".
Note que la salida de la primera sentencia no muestra los
registros con cadenas vacas y tampoco los que tienen valor
nulo; el resultado de la segunda sentencia muestra los registros
con valor para el campo laboratorio (incluso cadena vaca).

m. Recupere los registros cuyo precio sea distinto de 0, luego los
que sean distintos de "null":
Note que la salida de la primera sentencia no muestra los
registros con valor 0 y tampoco los que tienen valor nulo; el
86

resultado de la segunda sentencia muestra los registros con
valor para el campo precio (incluso el valor 0).

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

create table medicamentos(
codigo integer not null,
nombre varchar(20) not null,
laboratorio varchar(20),
precio float,
cantidad integer not null
);

sp_columns medicamentos;

insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(1,'Sertal gotas',null,null,100);
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(2,'Sertal compuesto',null,8.90,150);
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(3,'Buscapina','Roche',null,200);

select *from medicamentos;

insert into medicamentos (codigo,nombre, laboratorio,precio,cantidad)
values(4,'Bayaspirina','',0,150);

insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(0,'','Bayer',15.60,0);

select *from medicamentos;

insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(null,'Amoxidal jarabe','Bayer',25,120);

select *from medicamentos
where laboratorio is null;

select *from medicamentos
where laboratorio='';

select *from medicamentos
where precio is null;

select *from medicamentos
where precio=0;
87


select *from medicamentos
where laboratorio<>'';

select *from medicamentos
where laboratorio is not null;

select *from medicamentos
where precio<>0;

select *from medicamentos
where precio is not null;

Segundo problema:
Trabaje con la tabla que almacena los datos sobre pelculas, llamada
"peliculas".
a. Elimine la tabla si existe:
if object_id('peliculas') is not null
drop table peliculas;

b. Crela con la siguiente estructura:
create table peliculas(
codigo int not null,
titulo varchar(40) not null,
actor varchar(20),
duracion int
);

c. Visualice la estructura de la tabla sp_columns peliculas; note
que el campo "codigo" y "titulo", en la columna "IS_NULLABLE"
muestra "NO" y los otros campos "YES".

d. Ingrese los siguientes registros:
insert into peliculas (codigo,titulo,actor,duracion)
values(1,'Mision imposible','Tom Cruise',120);
insert into peliculas (codigo,titulo,actor,duracion)
values(2,'Harry Potter y la piedra filosofal',null,180);
insert into peliculas (codigo,titulo,actor,duracion)
values(3,'Harry Potter y la camara secreta','Daniel R.',null);
insert into peliculas (codigo,titulo,actor,duracion)
values(0,'Mision imposible 2','',150);
insert into peliculas (codigo,titulo,actor,duracion)
values(4,'','L. Di Caprio',220);
insert into peliculas (codigo,titulo,actor,duracion)
values(5,'Mujer bonita','R. Gere-J. Roberts',0);

88

e. Recupere todos los registros para ver cmo SQL Server los
almacen:
select *from peliculas;

f. Intente ingresar un registro con valor nulo para campos que no
lo admiten (aparece un mensaje de error):
insert into peliculas (codigo,titulo,actor,duracion)
values(null,'Mujer bonita','R. Gere-J. Roberts',190);

g. Muestre los registros con valor nulo en el campo "actor" y luego
los que guardan una cadena vaca (note que la salida es
distinta) (1 registro)

h. Modifique los registros que tengan valor de duracin
desconocido (nulo) por "120" (1 registro actualizado)

i. Coloque 'Desconocido' en el campo "actor" en los registros que
tengan una cadena vaca en dicho campo (1 registro afectado)

j. Muestre todos los registros. Note que el cambio anterior no
afect a los registros con valor nulo en el campo "actor".

k. Elimine los registros cuyo ttulo sea una cadena vaca (1
registro)

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

create table peliculas(
codigo int not null,
titulo varchar(40) not null,
actor varchar(20),
duracion int
);

sp_columns peliculas;

insert into peliculas (codigo,titulo,actor,duracion)
values(1,'Mision imposible','Tom Cruise',120);
insert into peliculas (codigo,titulo,actor,duracion)
values(2,'Harry Potter y la piedra filosofal',null,180);
insert into peliculas (codigo,titulo,actor,duracion)
values(3,'Harry Potter y la camara secreta','Daniel R.',null);
insert into peliculas (codigo,titulo,actor,duracion)
values(0,'Mision imposible 2','',150);
89

insert into peliculas (codigo,titulo,actor,duracion)
values(4,'','L. Di Caprio',220);
insert into peliculas (codigo,titulo,actor,duracion)
values(5,'Mujer bonita','R. Gere-J. Roberts',0);

select *from peliculas;

insert into peliculas (codigo,titulo,actor,duracion)
values(null,'Mujer bonita','R. Gere-J. Roberts',190);

select * from peliculas
where actor is null;

update peliculas set duracion=120 where duracion is null;

update peliculas set actor='Desconocido'
where actor='';

select * from peliculas;

delete from peliculas
where titulo='';

select * from peliculas;

12. Clave primaria
Primer problema:
Trabaje con la tabla "libros" de una librera.
a. Elimine la tabla si existe:
if object_id('libros') is not null
drop table libros;

b. Crela con los siguientes campos, estableciendo como clave
primaria el campo "codigo":
create table libros(
codigo int not null,
titulo varchar(40) not null,
autor varchar(20),
editorial varchar(15),
primary key(codigo)
);

c. Ingrese los siguientes registros:
insert into libros (codigo,titulo,autor,editorial)
values (1,'El aleph','Borges','Emece');
insert into libros (codigo,titulo,autor,editorial)
90

values (2,'Martin Fierro','Jose Hernandez','Planeta');
insert into libros (codigo,titulo,autor,editorial)
values (3,'Aprenda PHP','Mario Molina','Nuevo Siglo');

d. Ingrese un registro con cdigo repetido (aparece un mensaje de
error)

e. Intente ingresar el valor "null" en el campo "codigo"

f. Intente actualizar el cdigo del libro "Martin Fierro" a "1"
(mensaje de error)

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

create table libros(
codigo int not null,
titulo varchar(40) not null,
autor varchar(20),
editorial varchar(15),
primary key(codigo)
);

insert into libros (codigo,titulo,autor,editorial)
values (1,'El aleph','Borges','Emece');
insert into libros (codigo,titulo,autor,editorial)
values (2,'Martin Fierro','Jose Hernandez','Planeta');
insert into libros (codigo,titulo,autor,editorial)
values (3,'Aprenda PHP','Mario Molina','Nuevo Siglo');

insert into libros (codigo,titulo,autor,editorial)
values (2,'Alicia en el pais de las maravillas','Lewis Carroll','Planeta');

insert into libros (codigo,titulo,autor,editorial)
values (null,'Alicia en el pais de las maravillas','Lewis Carroll','Planeta');

update libros set codigo=1
where titulo='Martin Fierro';

Segundo problema:
Un instituto de enseanza almacena los datos de sus estudiantes en una
tabla llamada "alumnos".
a. Elimine la tabla "alumnos" si existe:
if object_id('alumnos') is not null
drop table alumnos;

91

b. Cree la tabla con la siguiente estructura intentando establecer 2
campos como clave primaria, el
campo "documento" y "legajo" (no lo permite):
create table alumnos(
legajo varchar(4) not null,
documento varchar(8),
nombre varchar(30),
domicilio varchar(30),
primary key(documento),
primary key(legajo)
);

c. Cree la tabla estableciendo como clave primaria el campo
"documento":
create table alumnos(
legajo varchar(4) not null,
documento varchar(8),
nombre varchar(30),
domicilio varchar(30),
primary key(documento)
);

d. Verifique que el campo "documento" no admite valores nulos:
sp_columns alumnos;

e. Ingrese los siguientes registros:
insert into alumnos (legajo,documento,nombre,domicilio)
values('A233','22345345','Perez Mariana','Colon 234');
insert into alumnos (legajo,documento,nombre,domicilio)
values('A567','23545345','Morales Marcos','Avellaneda 348');

f. Intente ingresar un alumno con nmero de documento existente
(no lo permite)

g. Intente ingresar un alumno con documento nulo (no lo permite)

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

create table alumnos(
legajo varchar(4) not null,
documento varchar(8),
nombre varchar(30),
domicilio varchar(30),
primary key(documento),
primary key(legajo)
92

);

create table alumnos(
legajo varchar(4) not null,
documento varchar(8),
nombre varchar(30),
domicilio varchar(30),
primary key(documento)
);

sp_columns alumnos;

insert into alumnos (legajo,documento,nombre,domicilio)
values('A233','22345345','Perez Mariana','Colon 234');
insert into alumnos (legajo,documento,nombre,domicilio)
values('A567','23545345','Morales Marcos','Avellaneda 348');

insert into alumnos (legajo,documento,nombre,domicilio)
values('A642','23545345','Gonzalez Analia','Caseros 444');

insert into alumnos (legajo,documento,nombre,domicilio)
values('A685',null,'Miranda Carmen','Uspallata 999');
13. Campo con atributo Identity
Primer problema:
Una farmacia guarda informacin referente a sus medicamentos en una
tabla llamada "medicamentos".
a. Elimine la tabla,si existe:
if object_id('medicamentos') is not null
drop table medicamentos;

b. Cree la tabla con un campo "codigo" que genere valores
secuenciales automticamente:
create table medicamentos(
codigo int identity,
nombre varchar(20) not null,
laboratorio varchar(20),
precio float,
cantidad integer
);

c. Visualice la estructura de la tabla "medicamentos":
sp_columns medicamentos;

d. Ingrese los siguientes registros:
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Sertal','Roche',5.2,100);
93

insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Buscapina','Roche',4.10,200);
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Amoxidal 500','Bayer',15.60,100);

e. Verifique que SQL Server gener valores para el campo "cdigo"
de modo automtico:
select *from medicamentos;

f. Intente ingresar un registro con un valor para el campo "codigo"

g. Intente actualizar un valor de cdigo (aparece un mensaje de
error)

h. Elimine el registro con codigo "3" (1 registro eliminado)

i. Ingrese un nuevo registro:
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Amoxilina 500','Bayer',15.60,100);

j. Seleccione todos los registros para ver qu valor guard SQL
Server en el campo cdigo:
select *from medicamentos;

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

create table medicamentos(
codigo int identity,
nombre varchar(20) not null,
laboratorio varchar(20),
precio float,
cantidad integer
);

sp_columns medicamentos;

insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Sertal','Roche',5.2,100);
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Buscapina','Roche',4.10,200);
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Amoxidal 500','Bayer',15.60,100);

select *from medicamentos;

94

insert into medicamentos (codigo,nombre, laboratorio,precio,cantidad)
values(4,'Amoxilina 500','Bayer',15.60,100);

update medicamentos set codigo=5
where nombre='Bayaspirina';

delete from medicamentos
where codigo=3;

insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Amoxilina 500','Bayer',15.60,100);

select *from medicamentos;

Segundo problema:
Un videoclub almacena informacin sobre sus pelculas en una tabla
llamada "peliculas".
a. Elimine la tabla si existe:
if object_id('peliculas') is not null
drop table peliculas;

b. Crela definiendo un campo "codigo" autoincrementable y como
clave primaria:
create table peliculas(
codigo int identity,
titulo varchar(40),
actor varchar(20),
duracion int,
primary key(codigo)
);

c. Ejecute el procedimiento almacenado para visualizar la
estructura de la tabla:
sp_columns peliculas;

d. Ingrese los siguientes registros:
insert into peliculas (titulo,actor,duracion)
values('Mision imposible','Tom Cruise',120);
insert into peliculas (titulo,actor,duracion)
values('Harry Potter y la piedra filosofal','Daniel R.',180);
insert into peliculas (titulo,actor,duracion)
values('Harry Potter y la camara secreta','Daniel R.',190);
insert into peliculas (titulo,actor,duracion)
values('Mision imposible 2','Tom Cruise',120);
insert into peliculas (titulo,actor,duracion)
values('La vida es bella','zzz',220);
95


e. Seleccione todos los registros y verifique la carga automtica de
los cdigos:
select *from peliculas;

f. Intente actualizar el codigo de una pelcula (aparece un mensaje
de error)

g. Elimine la pelcula "La vida es bella".

h. Ingrese un nuevo registro.

i. Visualice los registros para ver el valor almacenado en codigo
(valor 7):
select *from peliculas;

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

create table peliculas(
codigo int identity,
titulo varchar(40),
actor varchar(20),
duracion int,
primary key(codigo)
);

sp_columns peliculas;

insert into peliculas (titulo,actor,duracion)
values('Mision imposible','Tom Cruise',120);
insert into peliculas (titulo,actor,duracion)
values('Harry Potter y la piedra filosofal','Daniel R.',180);
insert into peliculas (titulo,actor,duracion)
values('Harry Potter y la camara secreta','Daniel R.',190);
insert into peliculas (titulo,actor,duracion)
values('Mision imposible 2','Tom Cruise',120);
insert into peliculas (titulo,actor,duracion)
values('La vida es bella','zzz',220);

select *from peliculas;

update peliculas set codigo=7
where codigo=4;

delete from peliculas
96

where titulo='La vida es bella';

insert into peliculas (titulo,actor,duracion)
values('Elsa y Fred','China Zorrilla',90);

select *from peliculas;

14. Otras caractersticas del atributo Identity
Primer problema:
Una farmacia guarda informacin referente a sus medicamentos en una
tabla llamada "medicamentos".
a. Elimine la tabla,si existe:
if object_id('medicamentos') is not null
drop table medicamentos;

b. Cree la tabla con un campo "codigo" que genere valores
secuenciales automticamente comenzando en 10 e
incrementndose en 1:
create table medicamentos(
codigo integer identity(10,1),
nombre varchar(20) not null,
laboratorio varchar(20),
precio float,
cantidad integer
);

c. Ingrese los siguientes registros:
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Sertal','Roche',5.2,100);
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Buscapina','Roche',4.10,200);
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Amoxidal 500','Bayer',15.60,100);

d. Verifique que SQL Server gener valores para el campo "cdigo"
de modo automtico:
select *from medicamentos;

e. Intente ingresar un registro con un valor para el campo
"codigo".

f. Setee la opcin "identity_insert" en "on"

g. Ingrese un nuevo registro sin valor para el campo "codigo" (no
lo permite):
97

insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Amoxilina 500','Bayer',15.60,100);

h. 8- Ingrese un nuevo registro con valor para el campo "codigo"
repetido.

i. 9- Use la funcin "ident_seed()" para averiguar el valor de inicio
del campo "identity" de la tabla "medicamentos"

j. Emplee la funcin "ident_incr()" para saber cul es el valor de
incremento del campo "identity" de "medicamentos"

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

create table medicamentos(
codigo integer identity(10,1),
nombre varchar(20) not null,
laboratorio varchar(20),
precio float,
cantidad integer
);

insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Sertal','Roche',5.2,100);
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Buscapina','Roche',4.10,200);
insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Amoxidal 500','Bayer',15.60,100);

select *from medicamentos;

insert into medicamentos (codigo,nombre, laboratorio,precio,cantidad)
values(4,'Amoxilina 500','Bayer',15.60,100);

set identity_insert medicamentos on;

insert into medicamentos (nombre, laboratorio,precio,cantidad)
values('Amoxilina 500','Bayer',15.60,100);

insert into medicamentos (codigo,nombre, laboratorio,precio,cantidad)
values(10,'Amoxilina 500','Bayer',15.60,100);

select ident_seed('medicamentos');

select ident_incr('medicamentos');
98


Segundo problema:
Un videoclub almacena informacin sobre sus pelculas en una tabla
llamada "peliculas".
a. Elimine la tabla si existe:
if object_id('peliculas') is not null
drop table peliculas;

b. Crela definiendo un campo "codigo" autoincrementable que
comience en 50 y se incremente en 3:
create table peliculas(
codigo int identity (50,3),
titulo varchar(40),
actor varchar(20),
duracion int
);

c. Ingrese los siguientes registros:
insert into peliculas (titulo,actor,duracion)
values('Mision imposible','Tom Cruise',120);
insert into peliculas (titulo,actor,duracion)
values('Harry Potter y la piedra filosofal','Daniel R.',180);
insert into peliculas (titulo,actor,duracion)
values('Harry Potter y la camara secreta','Daniel R.',190);

d. Seleccione todos los registros y verifique la carga automtica de
los cdigos:
select *from peliculas;

e. Setee la opcin "identity_insert" en "on"

f. Ingrese un registro con valor de cdigo menor a 50.

g. Ingrese un registro con valor de cdigo mayor al ltimo
generado.

h. Averigue el valor de inicio del campo "identity" de la tabla
"peliculas".

i. Averigue el valor de incremento del campo "identity" de
"peliculas".

j. Intente ingresar un registro sin valor para el campo cdigo.

k. Desactive la opcin se insercin para el campo de identidad.
99


l. Ingrese un nuevo registro y muestre todos los registros para ver
cmo SQL Server sigui la secuencia tomando el ltimo valor del
campo como referencia.

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

create table peliculas(
codigo int identity (50,3),
titulo varchar(40),
actor varchar(20),
duracion int
);

insert into peliculas (titulo,actor,duracion)
values('Mision imposible','Tom Cruise',120);
insert into peliculas (titulo,actor,duracion)
values('Harry Potter y la piedra filosofal','Daniel R.',180);
insert into peliculas (titulo,actor,duracion)
values('Harry Potter y la camara secreta','Daniel R.',190);

select *from peliculas;

set identity_insert peliculas on;

insert into peliculas (codigo,titulo,actor,duracion)
values(20,'Mision imposible 2','Tom Cruise',120);

insert into peliculas (codigo, titulo,actor,duracion)
values(80,'La vida es bella','zzz',220);

select ident_seed('peliculas');

select ident_incr('peliculas');

insert into peliculas (titulo,actor,duracion)
values('Elsa y Fred','China Zorrilla',90);

set identity_insert peliculas off;

insert into peliculas (titulo,actor,duracion)
values('Elsa y Fred','China Zorrilla',90);
select *from peliculas;
100

15. Truncate table
Primer problema:
Un instituto de enseanza almacena los datos de sus estudiantes en una
tabla llamada "alumnos".
a. Elimine la tabla "alumnos" si existe:
if object_id('alumnos') is not null
drop table alumnos;

b. Cree la tabla con la siguiente estructura:
create table alumnos(
legajo int identity,
documento varchar(8),
nombre varchar(30),
domicilio varchar(30)
);

c. Ingrese los siguientes registros y mustrelos para ver la
secuencia de cdigos:
insert into alumnos (documento,nombre,domicilio)
values('22345345','Perez Mariana','Colon 234');
insert into alumnos (documento,nombre,domicilio)
values('23545345','Morales Marcos','Avellaneda 348');
insert into alumnos (documento,nombre,domicilio)
values('24356345','Gonzalez Analia','Caseros 444');
insert into alumnos (documento,nombre,domicilio)
values('25666777','Torres Ramiro','Dinamarca 209');

d. Elimine todos los registros con "delete".

e. Ingrese los siguientes registros y seleccinelos para ver cmo
SQL Server gener los cdigos:
insert into alumnos (documento,nombre,domicilio)
values('22345345','Perez Mariana','Colon 234');
insert into alumnos (documento,nombre,domicilio)
values('23545345','Morales Marcos','Avellaneda 348');
insert into alumnos (documento,nombre,domicilio)
values('24356345','Gonzalez Analia','Caseros 444');
insert into alumnos (documento,nombre,domicilio)
values('25666777','Torres Ramiro','Dinamarca 209');
select *from alumnos;

f. Elimine todos los registros con "truncate table".

101

g. Ingrese los siguientes registros y muestre todos los registros
para ver que SQL Server reinici la secuencia del campo
"identity":
insert into alumnos (documento,nombre,domicilio)
values('22345345','Perez Mariana','Colon 234');
insert into alumnos (documento,nombre,domicilio)
values('23545345','Morales Marcos','Avellaneda 348');
insert into alumnos (documento,nombre,domicilio)
values('24356345','Gonzalez Analia','Caseros 444');
insert into alumnos (documento,nombre,domicilio)
values('25666777','Torres Ramiro','Dinamarca 209');
select *from alumnos;

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

create table alumnos(
legajo int identity,
documento varchar(8),
nombre varchar(30),
domicilio varchar(30)
);

insert into alumnos (documento,nombre,domicilio)
values('22345345','Perez Mariana','Colon 234');
insert into alumnos (documento,nombre,domicilio)
values('23545345','Morales Marcos','Avellaneda 348');
insert into alumnos (documento,nombre,domicilio)
values('24356345','Gonzalez Analia','Caseros 444');
insert into alumnos (documento,nombre,domicilio)
values('25666777','Torres Ramiro','Dinamarca 209');

delete from alumnos;

insert into alumnos (documento,nombre,domicilio)
values('22345345','Perez Mariana','Colon 234');
insert into alumnos (documento,nombre,domicilio)
values('23545345','Morales Marcos','Avellaneda 348');
insert into alumnos (documento,nombre,domicilio)
values('24356345','Gonzalez Analia','Caseros 444');
insert into alumnos (documento,nombre,domicilio)
values('25666777','Torres Ramiro','Dinamarca 209');
select *from alumnos;

truncate table alumnos;

insert into alumnos (documento,nombre,domicilio)
102

values('22345345','Perez Mariana','Colon 234');
insert into alumnos (documento,nombre,domicilio)
values('23545345','Morales Marcos','Avellaneda 348');
insert into alumnos (documento,nombre,domicilio)
values('24356345','Gonzalez Analia','Caseros 444');
insert into alumnos (documento,nombre,domicilio)
values('25666777','Torres Ramiro','Dinamarca 209');
select *from alumnos;

Segundo problema:
Un comercio que vende artculos de computacin registra los datos de
sus artculos en una tabla con ese nombre.
a. Elimine "articulos", si existe:
if object_id('articulos') is not null
drop table articulos;

b. Cree la tabla, con la siguiente estructura:
create table articulos(
codigo integer identity,
nombre varchar(20),
descripcion varchar(30),
precio float
);

c. Ingrese algunos registros:
insert into articulos (nombre, descripcion, precio)
values ('impresora','Epson Stylus C45',400.80);
insert into articulos (nombre, descripcion, precio)
values ('impresora','Epson Stylus C85',500);

d. Elimine todos los registros con "truncate table".

e. Ingrese algunos registros y mustrelos para ver que la
secuencia de cdigos se reinicia:
insert into articulos (nombre, descripcion, precio)
values ('monitor','Samsung 14',800);
insert into articulos (nombre, descripcion, precio)
values ('teclado','ingles Biswal',100);
insert into articulos (nombre, descripcion, precio)
values ('teclado','espaol Biswal',90);
select *from articulos;

f. Elimine todos los registros con "delete".

g. Ingrese algunos registros y mustrelos para ver que la
secuencia de cdigos continua:
103

insert into articulos (nombre, descripcion, precio)
values ('monitor','Samsung 14',800);
insert into articulos (nombre, descripcion, precio)
values ('teclado','ingles Biswal',100);
insert into articulos (nombre, descripcion, precio)
values ('teclado','espaol Biswal',90);
select *from articulos;

16. Otros tipos de datos en SQL Server
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:

a. 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,
nmeros de documentos, nmeros telefnicos.
SQL Server ofrece los siguientes tipos: char, nchar, varchar,
nvarchar, text y ntext.
b. 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.
c. 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
104

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.

17. Tipo de dato (texto)

Primer problema:
Una concesionaria de autos vende autos usados y almacena los datos de
los autos en una tabla llamada "autos".

a. Elimine la tabla "autos" si existe:

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

b. Cree la tabla eligiendo el tipo de dato adecuado para cada
campo, estableciendo el campo "patente" como clave primaria:
create table autos(
patente char(6),
marca varchar(20),
modelo char(4),
precio float,
primary key (patente)
);

Hemos definido el campo "patente" de tipo "char" y no "varchar" porque
la cadena de caracteres siempre tendr la misma longitud (6
caracteres). Lo mismo sucede con el campo "modelo", en el cual
almacenaremos el ao, necesitamos 4 caracteres fijos.

c. Ingrese los siguientes registros:
insert into autos
values('ACD123','Fiat 128','1970',15000);
insert into autos
values('ACG234','Renault 11','1990',40000);
insert into autos
values('BCD333','Peugeot 505','1990',80000);
insert into autos
values('GCD123','Renault Clio','1990',70000);
insert into autos
values('BCC333','Renault Megane','1998',95000);
insert into autos
values('BVF543','Fiat 128','1975',20000);

d. Seleccione todos los autos del ao 1990:
105

select *from autos
where modelo='1990';

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

create table autos(
patente char(6),
marca varchar(20),
modelo char(4),
precio float,
primary key (patente)
);

insert into autos
values('ACD123','Fiat 128','1970',15000);
insert into autos
values('ACG234','Renault 11','1990',40000);
insert into autos
values('BCD333','Peugeot 505','1990',80000);
insert into autos
values('GCD123','Renault Clio','1990',70000);
insert into autos
values('BCC333','Renault Megane','1998',95000);
insert into autos
values('BVF543','Fiat 128','1975',20000);

select *from autos
where modelo='1990';
Segundo problema:
Una empresa almacena los datos de sus clientes en una tabla llamada
"clientes".
a. Elimine la tabla "clientes" si existe:
if object_id('clientes') is not null
drop table clientes;

b. Crela eligiendo el tipo de dato ms adecuado para cada campo:
create table clientes(
documento char(8),
apellido varchar(20),
nombre varchar(20),
domicilio varchar(30),
telefono varchar (11)
);

106

c. Analice la definicin de los campos. Se utiliza char(8) para el
documento porque siempre constar de 8 caracteres. Para el
nmero telefnico se usar "varchar" y no un tipo numrico
porque si bien es un nmero, con l no se realizarn
operaciones matemticas.

d. Ingrese algunos registros:
insert into clientes
values('2233344','Perez','Juan','Sarmiento 980','4342345');
insert into clientes (documento,apellido,nombre,domicilio)
values('2333344','Perez','Ana','Colon 234');
insert into clientes
values('2433344','Garcia','Luis','Avellaneda 1454','4558877');
insert into clientes
values('2533344','Juarez','Ana','Urquiza 444','4789900');

e. Seleccione todos los clientes de apellido "Perez" (2 registros):
select *from clientes
where apellido='Perez';

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

create table clientes(
documento char(8),
apellido varchar(20),
nombre varchar(20),
domicilio varchar(30),
telefono varchar (11)
);

insert into clientes
values('2233344','Perez','Juan','Sarmiento 980','4342345');
insert into clientes (documento,apellido,nombre,domicilio)
values('2333344','Perez','Ana','Colon 234');
insert into clientes
values('2433344','Garcia','Luis','Avellaneda 1454','4558877');
insert into clientes
values('2533344','Juarez','Ana','Urquiza 444','4789900');

select *from clientes
where apellido='Perez';

18. Tipo de dato (numrico)

107

Primer problema:
Un banco tiene registrados las cuentas corrientes de sus clientes en una
tabla llamada "cuentas".
La tabla contiene estos datos:
Nmero de Cuenta Documento Nombre Saldo
______________________________________________________________
1234 25666777 Pedro Perez 500000.60
2234 27888999 Juan Lopez -250000
3344 27888999 Juan Lopez 4000.50
3346 32111222 Susana Molina 1000

a. Elimine la tabla "cuentas" si existe:
if object_id('cuentas') is not null
drop table cuentas;

b. 2- Cree la tabla eligiendo el tipo de dato adecuado para
almacenar los datos descriptos arriba:

- Nmero de cuenta: entero, no nulo, no puede haber valores
repetidos, clave primaria;
- Documento del propietario de la cuenta: cadena de
caracteres de 8 de longitud (siempre 8), no nulo;
- Nombre del propietario de la cuenta: cadena de caracteres de
30 de longitud,
- Saldo de la cuenta: valores altos con decimales.

c. Ingrese los siguientes registros:
insert into cuentas(numero,documento,nombre,saldo)
values('1234','25666777','Pedro Perez',500000.60);
insert into cuentas(numero,documento,nombre,saldo)
values('2234','27888999','Juan Lopez',-250000);
insert into cuentas(numero,documento,nombre,saldo)
values('3344','27888999','Juan Lopez',4000.50);
insert into cuentas(numero,documento,nombre,saldo)
values('3346','32111222','Susana Molina',1000);
Note que hay dos cuentas, con distinto nmero de cuenta, de la
misma persona.

d. Seleccione todos los registros cuyo saldo sea mayor a "4000" (2
registros)

e. Muestre el nmero de cuenta y saldo de todas las cuentas cuyo
propietario sea "Juan Lopez" (2 registros)

f. Muestre las cuentas con saldo negativo (1 registro)
108


g. Muestre todas las cuentas cuyo nmero es igual o mayor a
"3000" (2 registros):
select *from cuentas
where numero>=3000;

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

create table cuentas(
numero int not null,
documento char(8),
nombre varchar(30),
saldo money,
primary key (numero)
);

insert into cuentas(numero,documento,nombre,saldo)
values('1234','25666777','Pedro Perez',500000.60);
insert into cuentas(numero,documento,nombre,saldo)
values('2234','27888999','Juan Lopez',-250000);
insert into cuentas(numero,documento,nombre,saldo)
values('3344','27888999','Juan Lopez',4000.50);
insert into cuentas(numero,documento,nombre,saldo)
values('3346','32111222','Susana Molina',1000);

select *from cuentas
where saldo<4000;

select numero,saldo from cuentas
where nombre='Juan Lopez';

select *from cuentas
where saldo<0;

select *from cuentas
where numero>=3000;

Segundo problema:
Una empresa almacena los datos de sus empleados en una tabla
"empleados" que guarda los siguientes datos: nombre, documento,
sexo, domicilio, sueldobasico.
a. Elimine la tabla, si existe:
if object_id('empleados') is not null
drop table empleados;

109

b. Cree la tabla eligiendo el tipo de dato adecuado para cada
campo:
create table empleados(
nombre varchar(30),
documento char(8),
sexo char(1),
domicilio varchar(30),
sueldobasico decimal(7,2),--mximo estimado 99999.99
cantidadhijos tinyint--no superar los 255
);

c. Ingrese algunos registros:
insert into empleados (nombre,documento,sexo,domicilio,sueldobasico,cantidadhijos)
values ('Juan Perez','22333444','m','Sarmiento 123',500,2);
insert into empleados (nombre,documento,sexo,domicilio,sueldobasico,cantidadhijos)
values ('Ana Acosta','24555666','f','Colon 134',850,0);
insert into empleados (nombre,documento,sexo,domicilio,sueldobasico,cantidadhijos)
values ('Bartolome Barrios','27888999','m','Urquiza 479',10000.80,4);

d. Ingrese un valor de "sueldobasico" con ms decimales que los
definidos (redondea los decimales al valor ms cercano 800.89):
insert into empleados (nombre,documento,sexo,domicilio,sueldobasico,cantidadhijos)
values ('Susana Molina','29000555','f','Salta 876',800.888,3);

e. Intente ingresar un sueldo que supere los 7 dgitos (no lo
permite)

f. Muestre todos los empleados cuyo sueldo no supere los 900
pesos (1 registro):

g. Seleccione los nombres de los empleados que tengan hijos (3
registros):


19. Tipo de dato (fecha y hora)

Primer problema:
Una facultad almacena los datos de sus alumnos en una tabla
denominada "alumnos".
a. Elimine la tabla, si existe:
if object_id('alumnos') is not null
drop table alumnos;

b. Cree la tabla eligiendo el tipo de dato adecuado para cada
campo:
110

create table alumnos(
apellido varchar(30),
nombre varchar(30),
documento char(8),
domicilio varchar(30),
fechaingreso datetime,
fechanacimiento datetime
);

c. Setee el formato para entrada de datos de tipo fecha para que
acepte valores "da-mes-ao":
set dateformat 'dmy';

d. Ingrese un alumno empleando distintos separadores para las
fechas:
insert into alumnos values('Gonzalez','Ana','22222222','Colon 123','10-08-
1990','15/02/1972');

e. Ingrese otro alumno empleando solamente un dgito para da y
mes y 2 para el ao:
insert into alumnos values('Juarez','Bernardo','25555555','Sucre 456','03-03-
1991','15/02/1972');

f. Ingrese un alumnos empleando 2 dgitos para el ao de la fecha
de ingreso y "null" en "fechanacimiento":
insert into alumnos values('Perez','Laura','26666666','Bulnes 345','03-03-91',null);

g. Intente ingresar un alumno con fecha de ingreso
correspondiente a "15 de marzo de 1990" pero en
orden incorrecto "03-15-90":
insert into alumnos values('Lopez','Carlos','27777777','Sarmiento 1254','03-15-
1990',null);
aparece un mensaje de error porque lo lee con el formato da,
mes y ao y no reconoce el mes 15.

h. Muestre todos los alumnos que ingresaron antes del '1-1-91'.
1 registro.

i. Muestre todos los alumnos que tienen "null" en
"fechanacimiento":
select *from alumnos where fechanacimiento is null;
1 registro.

j. Intente ingresar una fecha de ingreso omitiendo los
separadores:
111

insert into alumnos values('Rosas','Romina','28888888','Avellaneda 487','03151990',null);
No lo acepta.

k. Setee el formato de entrada de fechas para que acepte valores
"mes-dia-ao".

l. Ingrese el registro del punto 7.

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

create table alumnos(
apellido varchar(30),
nombre varchar(30),
documento char(8),
domicilio varchar(30),
fechaingreso datetime,
fechanacimiento datetime
);

set dateformat 'dmy';

insert into alumnos values('Gonzalez','Ana','22222222','Colon 123','10-08-
1990','15/02/1972');

insert into alumnos values('Juarez','Bernardo','25555555','Sucre 456','03-03-
1991','15/02/1972');

insert into alumnos values('Perez','Laura','26666666','Bulnes 345','03-03-91',null);

insert into alumnos values('Lopez','Carlos','27777777','Sarmiento 1254','03-15-1990',null);

select *from alumnos where fechaingreso<'1-1-91';

select *from alumnos where fechanacimiento is null;

insert into alumnos values('Rosas','Romina','28888888','Avellaneda 487','03151990',null);

set dateformat 'mdy';

insert into alumnos values('Lopez','Carlos','27777777','Sarmiento 1254','03-15-1990',null);

112

20. Ingresar algunos campos (insert into)
Problema:
Trabajamos con la tabla "libros" que almacena los datos de los libros de
una librera.
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) not null,
autor varchar(30),
editorial varchar(15)
);
Si ingresamos valores para todos los campos, podemos omitir la lista de
campos:
insert into libros
values ('Uno','Richard Bach','Planeta');
Podemos ingresar valores para algunos de los campos:
insert into libros (titulo, autor)
values ('El aleph','Borges');
No podemos omitir el valor para un campo declarado "not null", como el
campo "titulo":
insert into libros (autor,editorial)
values ('Lewis Carroll','Planeta');
aparece un mensaje y la insercin no se realiza.
Veamos cmo SQL Server almacen los registros:
select *from libros;

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

create table libros(
codigo int identity,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15)
);

insert into libros
values ('Uno','Richard Bach','Planeta');

insert into libros (titulo, autor)
values ('El aleph','Borges');

insert into libros (autor,editorial)
113

values ('Lewis Carroll','Planeta');

select *from libros;

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