You are on page 1of 58

UNIDAD I: USO de Consultas Primarias y

Secundarias en SQL Server 2005


 

Objetivos:
 

1.- Estudiar las reglas que se establecen para el uso de clausulas y palabras
reservadas para la creación de consultas primarias y secundarias en el Transact de
SQL Server 2005.

2.- Mediante ejemplos puntuales, mostrar el uso de consultas primarias y secundarias,


las cuales deben ser programadas para el proyecto de curso.

3.- Desarrollar las primeras instrucciones en el Transact de SQL Server para ser
incorporadas al proyecto.

Partiendo del prerrequisito de la asignatura de base de datos, se inicia con un repaso y


salificación de los conocimientos adquiridos en esta asignatura previa. Esta propuesta
de primer unidad contempla iniciar con el Transact de SQL Server ya sea versión 2005
o 2008.

SQL

Todas las bases de datos que admiten SQL son bases de datos relacionales. La
definición de una base de datos relacionales es un conjunto de información
relacionada. Se puede suponer que dos elementos de información (nombre y
direcciones, por ejemplo) que aparecen en la misma base de datos, mantendrán alguna
relación entre sí. Los nombres y las direcciones no aparecen de manera aleatoria. La
unión de un nombre y una dirección en la base de datos define una relación “pertenece
a”. Por ejemplo, la persona con ese nombre recibe su correspondencia de correo e
información bancaria en esa dirección, y la dirección pertenece a esa persona.

Para capturar las relaciones, los datos no se estructuran al azar. Se organizan en una
unidad básica denominada tabla. Todas las tablas contienen filas y columnas. Los
datos que aparecen en una sola fila están relacionados. En nuestro ejemplo, los
nombres y direcciones relacionados aparecen en una sola fila. Ruben Dario y Dario
aparecen juntos en una fila, y en virtud de su presencia en esta fila, se establece que
Dario es la dirección de Ruben Dario, y de nadie más.

Las columnas de la tabla clasifican la naturaleza de los datos que se encuentran


relacionados en virtud de su inserción en las filas. La columna Nombre identifica que
cualquier cosa aparezca en ese lugar, en cualquier fila, es el nombre de una persona.
La columna Dirección identifica que cualquier cosa que aparezca en ese lugar es una
dirección. La conclusión en una fila que tenga columna obliga a que los datos en ella
formen parte de un conjunto. En realidad las tablas de bases de datos son una
representación conceptual de la teoría de conjuntos, los cuales se deben poner en
practica, y solo la experiencia que usted adquiera, se dará cuenta de lo correcto e
incorrecto, lo exacto o lo imperfecto.

Otro ejemplo, más claro, la tabla que se muestra a continuación, almacena los atributos
de los Empleados.

La tabla esta compuesta de filas y columnas, en las cuales se almacenan valores.


Esta tabla consta de seis filas y cinco columnas.

La columna Número de cada fila en esta tabla es la clave primaria, una columna o
(grupo de columnas), que requiere un valor único que no puede duplicarse en otras
filas. Esto garantiza que pueda usarse un valor de clave primaria para identificar a una
fila en forma única.

Una clave primaria que esta compuesta por dos o más columnas se conoce como
clave compuesta. Algunos buenos ejemplos de columnas de clave primaria en otras
aplicaciones son el numero de identificación (ID) de un empleado en un sistema de
nomina y el número de piezas de un sistema de inventarios, se garantiza que los
valores en cada una de estas columnas serán únicos.
En el ejemplo que se muestra a continuación, se puede observar que la llave primaria
Nombres, está en orden. En este caso se listan en orden incremental (ascendente),
pero también podrían listar en orden decremental (descendente), o desordenada. En
prácticas más adelantes en este documento, usted podrá especificar criterios de
ordenamiento al solicitar la base de datos.

Cada columna representa un atributo de datos distinto. Por lo general, las filas son
únicas (por clave primaria) dentro de una tabla, pero algunos valores de las columnas
podrían duplicarse entre las filas. Por ejemplo, tres filas distintas en la columna
Departamento de la tabla Empleados contienen el número 413, lo cual indica que
estos empleados trabajan en el mismo departamento.

A menudo, los distintos usuarios de una base de datos se interesan en distintos datos,
y en diversas relaciones entre los datos. La mayoría solo requiere subconjuntos de las
filas y las columnas. Para obtener estos subconjuntos, los programadores utilizan SQL
para definir consultas que seleccionen subconjuntos de los datos de una tabla. Por
ejemplo un programa podría seleccionar la tabla Empleados para crear el resultado de
una consulta que muestre en donde está ubicado cada Departamento, en orden
ascendente, por el número del Departamento, esto de hecho, está incluido en este
documento. Usted aprenderá a utilizar el Generador de Consultas del IDE para crear
consultas de SQL.

Columna
Tabla Empleados
Llave
Primaria

Número Nombre Departamento Salario Ubicación


23603  Jaime  413 1100 Nueva Segovia
Fila 24568  Maylin  413 2000 Nueva Segovia
34589  Larry  642 1800 Jinotega 
35761  María  611 1400 Orlando 
47132  Norman  413 9000 Nueva Segovia
78321  Stephany  611 8500 Carazo 
Figura #1.- Datos ejemplo de la tabla Empleados.

En este instante se procede a brindar generalidades acerca de SQL Server, todo


basado en un ejemplo puntual (el cual es código ajustable a otras aplicaciones). Más
adelante se crean las condiciones para crear aplicaciones en C#, que ejecuta consultas
de SQL y accede a sus resultados mediante el uso de la tecnología ADO.NET,
proporcionando herramientas visuales, que ocultan parte de la información del SQL
Server. Aquí se dan los tips y primicias para los tipos de operaciones que usted puede
realizar y que le ayudaran y encaminaran a desarrollo de aplicaciones y sistemas más
avanzados, que hagan un uso extenso de las bases de datos.
 
El American National Standards Institute (ANSI) creó un estándar para SQL mismo que
ha tenido varias versiones. El estándar actual es ANSI SQL-92. La revisión en proceso
se denomina ANSI SQL-98 o SQL3.

Hay términos especiales que se asocian con las tablas:

Al número de filas de la tabla se le denomina cardinalidad.


El número de columnas es su grado.
Si dos columnas se pueden convertir al mismo tipo de datos, son de dominio
compatible.
Si dos tablas tienen el mismo grado, son de unión compatible.

Generalidades acerca de las bases de datos relacionales

La base de datos que se estudiara a continuación, consta de tres tablas:


a.- Autores.
b.- ISBNAutores.
c.- Titulos.

La tabla de Autores cuenta con tres columnas que mantienen el número de ID único
para cada autor, su primer nombre y apellido respectivamente. A continuación se
describe esta tabla:

Columna Descripción

IDAutor El número de ID del autor en la base de datos Libros, esta


columna de tipo entero se define como una columna de
identidad, también conocida como columna
autoincremental, para cada fila que se inserta en la tabla,
el valor de IDAutor se incrementa en 1 de manera
automática, para asegurar que cada fila tenga un IDAutor
único. Ésta es la clave primaria.
Nombre El primer nombre del autor (una cadena de caracteres).

Apellido El apellido del autor (una cadena de caracteres).

Figura #2.- La tabla Autores de la base de datos Libros.

IDAutor Nombre Apellido


1 Harvey Deitel
2 Paul Deitel
3 Andrew Goldberg
4 David Choffnes
Figura #3.- Datos de la tabla Autores de la base de datos Libros.

La tabla Titulos de la base de datos Libros tiene cuatro columnas que mantienen
información acerca de cada libro en la base de datos, incluyendo el ISBN, título,
número de edición y año de copyright.

Columna Descripción
ISBN El ISBN del libro (una cadena de caracteres), que es la clave
primaria de la tabla. ISBN es una abreviación de “Número
internacional estándar del libro”, un esquema de numeración
que utilizan las editoriales en todo el mundo para dar a cada
libro un número único de identificación.
Titulo El título del libro (una cadena de caracteres).
NumeroEdicion Número de edición del libro (una cadena de caracteres).
Copyright Año de copyright del libro (una cadena de caracteres).
Figura #4.- La tabla Titulos de la base de datos Libros.

ISBN Titulo NumeroEdicion Copyright

0131426443 Como Programar en C 4 2004


0131450913 Internet y como Programar en la 3 2004
WEB.
0131483986 Como Programar en Java. 6 2005
0131525239 Como Programar en C# 2 2006
0131828274 Sistemas Operativos 3 2004
0131857576 Como Programar en C++ 5 2005
0131869000 Como Programar en Visual Basic 3 2006
2005
Figura #5.- Datos de la tabla Titulos de la base de datos Libros.

La tabla ISBNAutores cuenta con dos columnas que mantienen números ISBN para
cada libro y sus correspondientes números ID del autor. Esta tabla asocia a los autores
con sus libros. La columna IDAutor es una clave externa, una columna que coincide
con la clave primaria en otra tabla (es decir, IDAutores en la tabla Autores). La
columna ISBN es una clave externa, concuerda con la columna de clave primaria (es
decir, ISBN) en la tabla Titulos.

Tanto la columna IDAutor como ISBN, en conjunto, forman, en esta tabla, la clave
primaria. Cada fila en esta tabla relaciona en forma única a un autor con el ISBN de un
libro.

Columna Descripción

IDAutor El número de ID del autor una clave externa para la tabla


Autores.
ISBN El ISBN del libro, una clave externa para la tabla Titulos.
Figura #6.- La tabla ISBNAutor de la base de datos Libros.

IDAutor ISBN
1 0131869000
1 0131525239
1 0131483986
1 0131857576
1 0131426443
1 0131450913
1 0131828274
2 0131828274
2 0131450913
2 0131426443
2 0131857576
2 0131483986
2 0131525239
2 0131869000
Figura #7- Datos de la tabla ISBNAutores de Libros.
Claves externas

Las claves externas pueden especificarse al momento de crear una tabla. Una clave
externa ayuda a mantener la Regla de Integridad Referencial, todo valor de clave
externa debe aparecer como valor de clave primaria de otra tabla.

Esto permite a los DBMS (Sistema de administración de bases de datos) determinar si


el valor de IDAutor para una fila específica de la tabla ISBNAutores es válida. Las
claves externas también permiten seleccionar datos relacionados en varias tablas de
esas tablas, esto se conoce como unir (Consultar en consultas, INNER JOIN) los
datos.

Hay una relación de uno a varios entre una clave primaria y su correspondiente clave
externa (por ejemplo, un autor puede escribir muchos libros). Esto significa que una
clave externa puede aparecer muchas veces en su propia tabla, pero sólo una vez
(como clave primaria) en otra tabla. Por ejemplo, el ISBN 0131450913 puede aparecer
en varias filas de ISBNAutor (ya que este libro tiene varios autores), pero sólo puede
aparecer una vez en Titulos, en donde ISBN es la clave primaria.

Diagrama de Entidad relación para la base de datos Libros

Un diagrama de entidad relación (ER) para la base de datos Libro, es utilizado para
mostrar las tablas en la base de datos y las relaciones entre ellas. El primer
compartimiento en cada cuadro contiene el nombre de la tabla. Los nombres en cursiva
son claves primarias (por ejemplo, IDAutor en la tabla Autores). La clave primaria de
una tabla identifica en forma única a cada fila de la misma. Cada fila debe tener un
valor en la columna de clave primaria, y el valor de la clave debe ser único en la tabla.
Esto se conoce como la Regla de integridad de entidades. Observe que los nombres
IDAutor e ISBN en la tabla ISBNAutor están en cursiva, en conjunto, éstos forman una
clave primaria compuesta para la tabla ISBNAutor (SQL Server es un sistemas de
administración de bases de datos relacionales [RDBMS], al igual Oracle, Sybase, IBM
DB2 y PostgreSQL. En el caso de MySQL es un RDBMS, se puede bajar gratis y en la
actualidad los derechos los tiene Sun’s).
 
 

 
 

Consultas Básicas

Existen muchas palabras claves o reservadas, las cuales se detallan en esta sección,
más adelante se definirán otras, las cuales son validas y utilizadas por SQL Server,
se muestran a continuación:

Palabra clave de SQL Descripción

SELECT Recupera datos de una o más tablas.

FROM Especificar las tablas involucradas en una


consulta, se requiere en todas las consultas.

WHERE Especificar criterios opcionales para la selección,


los cuales determinan las filas que se van a
recuperar, eliminar o actualizar.

ORDER BY Especifica criterios opcionales para ordenar filas


(por ejemplo, en orden ascendente o
descendente).

INNER JOIN Especificar un operador opcional para mezclar


filas de varias tablas.

INSERT Insertar filas en una tabla especificada.

UPDATE Actualizar filas en una tabla especificada.

DELETE Eliminar filas de una tabla especificada.

Figura #1.- Palabras Claves Comunes de SQL

SELECT

Se consideran varias consultas de SQL que recuperan datos e información de los


bancos de datos (o bases de datos). Una consulta de SQL “Selecciona” filas y
columnas de una o más tablas de una base de datos. Las consultas realizan dichas
selecciones con la palabra clave SELECT. La forma básica de una consulta SELECT
es:

SELECT * FROM NombreTabla

El asterisco (*) expresa o indica que deben recuperarse todas las columnas de la tabla
NombreTabla. Por ejemplo, para seleccionar todos los datos de la tabla AUTORES, se
usa:

SELECT * FROM AUTORES

Es importante destacar, que no se garantiza el orden en que las filas de la tabla


AUTORES se devuelvan, más adelante se dará un ejemplo donde usted puede definir
el orden que desea.

En muchas ocasiones, los programas no requieren todos los datos en una tabla. Para
recuperar sólo columnas especificas de una tabla, sustituya el asterisco (*) con una
lista separada de comas de los nombres de las columnas. Por ejemplo, para recuperar
sólo las columnas de IDAutor y Apellidos para todas las filas en la tabla AUTORES,
use la siguiente consulta:
SELECT IDAutor, Apellidos FROM AUTORES

Por sí solo, el verbo SELECT no logra nada, excepto devolver un error en la pantalla si
se intenta ejecutar el comando. Para recuperar la información con SELECT es
necesario usarlo con objetos, frase y cláusulas adicionales.

Clausura WHERE

En muchas ocasiones tanto los usuarios, así como los programadores buscan en una
base de datos filas que cumplan con ciertos criterios de selección (que formalmente
se les llama predicados), sólo se seleccionan las filas que cumplen con esos criterios
de selección. SQL utiliza la cláusula WHERE opcional en una consulta para especificar
los criterios de selección de la consulta, La forma básica de una consulta con criterios
de selección es:

SELECT nombreColumna1, nombreColumna2, …., nombreColumnan


FROM NombreTabla
WHERE Criterios

Por ejemplo, para seleccionar las columnas Titulo, NumeroEdicion y Copyright de la


tabla Titulos, en donde la fecha de Copyright sea más reciente que 2004, debe crear la
siguiente consulta:

SELECT Titulo, NumeroEdicion, Copyright


FROM Titulos
WHERE Copyright > ‘2004’

Los criterios de la Cláusula WHERE pueden contener los operadores relacionales <, >,
>=, >=, = (igual), <> (desigual) y LIKE, así como los operadores lógicos AND, OR y
NOT (los cuales se utilizaran más adelante).

El operador LIKE se utiliza para las coincidencias de patrones con los caracteres
comodines por ciento (%) y guión bajo (_). Las coincidencias de patrones permiten a
SQL Server buscar cadenas que coincidan con un patrón específico.

Un patrón que contiene un carácter de por ciento (%) busca que tengan cero o más
caracteres en la posición del carácter de por ciento en el patrón. Por ejemplo, la
siguiente consulta localiza las filas de todos los AUTORES cuyos apellidos empiecen
con la letra D:

SELECT IDAutor, Nombre, Apellido


FROM AUTORES
WHERE Apellido
LIKE ‘D%’

El % en el patrón LIKE de la cláusula WHERE indica que puede aparecer cualquier


número de caracteres después de la letra D en la columna Apellido. Observe que la
cadena del patrón va entre comillas sencillas.

Un guión bajo (_) en la cadena del patrón indica un solo carácter comodín en esa
posición en el patrón. Por ejemplo, la siguiente consulta localiza las filas de todos los
autores cuyo apellido empiece con cualquier carácter (especificado por _), seguido de
la letra h, seguido de cualquier número de caracteres adicionales (especificado por %):

SELECT TIDAutor, Nombre, Apellido


FROM AUTORES
WHERE Apellido
LIKE ‘_h%’

Cláusula ORDER BY

Las filas en el resultado de una consulta pueden almacenar en orden ascendente o


descendente, mediante el uso de la cláusula ORDER BY opcional. La forma básica de
una consulta con una cláusula ORDER BY es:

SELECT nombreColumna1, nombreColumna2, …., nombreColumnan


FROM NombreTabla
ORDER BY Columna
ASC

SELECT nombreColumna1, nombreColumna2, …., nombreColumnan


FROM NombreTabla
ORDER BY Columna
DESC
En donde ASC especifica un orden ascendente (de menor a mayor), DESC especifica
un orden descendente (de mayor a menor) y columna especifica la columna en la cual
se basa el ordenamiento. Por ejemplo, para obtener la lista de autores en orden
ascendente por apellido, se utilizara la siguiente consulta:

SELECT IDAutor, Nombre, Apellido


FROM AUTORES
ORDER BY Apellido
ASC

Para el orden descendente, se tiene que realizar el siguiente ajuste:

SELECT IDAutor, Nombre, Apellido


FROM AUTORES
ORDER BY Apellido
DESC

Se puede utilizar varias columnas para ordenar datos con una cláusula ORDER BY de
la forma:

ORDER BY columna1 tipoOrden, Columna2 tipoOrden, ….

En donde el tipoOrden puede ser ASC o DESC, observar la consulta en el siguiente


caso:

SELECT Titulo, NumeroEdicion, CopyRight


FROM TITULOS
ORDER BY CopyRight DESC, Titulo ASC

Esta consulta, devuelve las filas de la tabla Títulos, ordenadas primero en orden
descendente por fecha de copyright, después en orden ascendente por titulo. Esto
significa que las filas con valores mayores de Copyright se devuelven primero que las
filas con valores menores de Copyright, y todas las filas que tengan los mismos valores
de Copyright se ordenan en forma ascendente, por título.

Las cláusulas WHERE y ORDEN BY pueden combinarse en una sola consulta, por
ejemplo, la consulta:

SELECT Titulo, NumeroEdicion, CopyRight


FROM TITULOS
WHERE Titulos LIKE ‘Como Programar’
ORDER BY CopyRight DESC, Titulo ASC

Esta consulta devuelve el ISBN, Titulo, NumeroEdicion y Copyright en la tabla Titulos


que tengan un Titulo que termine con “Como Programar”, y los ordena en forma
ascendente por Titulo (probar esta consulta y agregar más comentario).
 

Mezcla de Datos de varias Tablas: INNER JOIN

Por lo general, los diseñadores de las bases de datos normalizan las bases de datos,
es decir, dividen los datos relacionados en tablas separadas, para asegurar que una
base de datos no almacene datos redundantes. Por ejemplo, la base de datos Libro
tiene la tabla Autores y Títulos. Utilizando una tabla ISBNAutor para almacenar
“vínculos” entre los autores y los títulos. Si no separáramos esta información en tablas
individuales, tendríamos que incluir la información del autor con cada entrada en la
tabla Títulos. Esto significaría que la base de datos estaría almacenando información
duplicada de los autores, para los autores que hayan escrito más de un libro,

A menudo es conveniente mezclar los datos provenientes de varias tablas en un solo


resultado, a este proceso se le conoce como unir las tablas, y se especifica mediante
un operador INNER JOIN en la consulta.

Una operación INNER JOIN mezcla filas de dos tablas, relacionando los valores en una
columna que sea común para las tablas. La forma básica de una operación INNER
JOIN es:

SELECT nombreColumna1, nombreColumna2, …….


FROM tabla1 INNER JOIN tabla2
ON tabla1.nombreColumna = tabla2.nombreColumna

La cláusula On de INNER JOIN especifica las columnas que se van a comparar de


cada tabla, para determinar cuáles filas se van a mezclar. Por ejemplo, la siguiente
consulta produce una lista de autores, acompañada de los ISBNs para los libros
escritos por cada autor:

SELECT Nombre, Apellido, ISBN


FROM Autores INNER JOIN ISBNAutor
ON Autor.IDAutor = ISBNAutor.IDAutor
ORDER BY Apellido, Nombre
La consulta combina las columnas PrimerNombre y Apellidos de la tabla Autores con la
columna ISBN de la tabla ISBNAutor, y almacena los resultados en orden ascendente
por Apellido y PrimerNombre. Es importante observar el uso de la sintaxis
nombreTabla.nombreColumna en la cláusula ON. Esta sintaxis (conocida como
nombre calificado) especifica las columnas de cada tabla que deben compararse para
unir las tablas. La sintaxis “nombreTabla” se requiere si las columnas tienen el mismo
nombre en ambas tablas. Puede usarse la misma sintaxis en cualquier consulta, para
diferenciar columna que tengan el mismo nombre en distinta tabla.

 
Nota:
 

  Un Error común, es que en una consulta de SQL Server, si no se califican los


nombres para las columnas que tengan el mismo nombre en dos o más tablas,
  se produce un error.

Instrucción INSERT

La instrucción INSERT inserta una fila en una tabla, la forma básica de esta instrucción
es:

INSERT INTO nombreTabla (nombreColumna1, nombreColumna2, …..,


nombreColumnaN)
VALUES (valor1, valor2, …., valorN)

El nombreTabla es la tabla en la que se va a insertar la fila. El nombreTabla va seguido


de una lista separada de comas de los nombres de las columnas entre paréntesis (no
se requiere esta lista si la operación INSERT especifica un valor para cada columna de
la tabla, en el orden correcto).

La lista de nombres de columnas va seguida de la palabra clave VALUES de SQL, y de


una lista separada por comas de los valores entre paréntesis. Los valores que se
especifican aquí deben coincidir con las columnas especificadas después del nombre
de la tabla, tanto en orden como en tipo (por ejemplo, si se supone que
nombreColumna1 es la columna PrimerNombre, entonces valor1 debe ser una cadena
entre comillas sencillas, que represente el primer nombre).

Siempre hay que listar de forma explícita las columnas al insertar filas, si cambia el
orden de las columnas en la tabla y se utiliza sólo VALUES, se puede generar un error.
La instrucción INSERT se implementa de la siguiente forma:

INSERT INTO Autores (PrimerNombre, Apellido)


VALUES (‘Sue’, ‘Smith’)

Inserta una fila en la tabla Autores, esta instrucción indica que los valores ‘Sue’ y
‘Smith’ se proporcionan para las columnas PrimerNombre y Apellido, respectivamente.

Instrucción UPDATE

Una instrucción UPDATE modifica datos en una tabla, la forma básica de la instrucción
UPDATE es:

UPDATE nombreTabla
SET nombreColumna1 = valor1, nombreColumna2 = valor2, nombreColumnaN =
valorN
WHERE criterios

En donde nombreTabla es la tabla que se va actualizar. El nombreTabla va seguido de


la palabra clave SET y de una lista, separada por comas, de pares nombre de columna-
valor, en el formato nombreColumna = valor. La cláusula WHERE opcional proporciona
los criterios que determinan cuales filas se van a actualizar. Aunque no se requiere, la
cláusula WHERE se utiliza comúnmente, a menos que se requiera hacer
modificaciones en todas las filas. La instrucción UPDATE es entonces:

UPDATE Autores
SET Apellido = ‘Jones’
WHERE Apellido = ‘Smith’ AND Nombre = ‘Sue’

Actualiza la fila en la tabla Autores, la palabra clave AND es un operador lógico que, al
igual que el operador && de C#, devuelve verdadero sí, y solo sí ambos operando son
verdaderos. Por ende, la instrucción anterior asigna el valor “Jones” a Apellidos para la
fila en la que Apellido es igual a “Smith”, y el primer nombre es igual a Sue.
Nota: Si hay varias filas con el primer nombre “Sue” y el apellido “Smith”, esta
instrucción modifica todas esas filas para que tengan el apellido “Jones”.

SQL también proporciona otros operadores lógicos como el OR y NOT, que se


comportan igual que sus contrapartes en C#.

Instrucción DELETE

Una instrucción DELETE elimina filas de una tabla, la forma básica de una instrucción
DELETE es:

DELETE nombreTabla WHERE criterios

En donde el nombreTabla es la tabla de la cual se van a eliminar datos. La cláusula


WHERE opcional especifica los criterios utilizados para determinar cuáles filas se van a
eliminar, por ejemplo:

DELETE FROM Autores


WHERE Apellido = ‘Jones’ AND Nombre = ‘Sue’

Esta consulta elimina la fila Sue Jones en la tabla Autores.

La instrucción DELETE puede eliminar varias filas, si esta cumple con los criterios en la
Cláusula WHERE.
 

Uso de los tipos de datos nativos

Los tipos de datos nativos son integrados en SQL Server y que tienen soporte directo,
todos los tipos de datos tienen un valor de longitud, que es fijo o variable.

La longitud para un tipo numérico o binario es el número de bytes usados


para almacenar al número.
La longitud de un tipo de dato de caracteres es el número de caracteres.
Casi todos los tipos de datos numéricos también tienen precisión y escala.
La precisión es el número de dígitos totales.
La escala es el número de dígitos que se encuentra a la derecha del punto
decimal.

Por ejemplo, el número 9899.334 tiene una precisión de siete y una


escalabilidad de tres.

La tabla que se muestra a continuación, tiene un resumen de los tipos de datos nativos
que funcionan con números y monedas. La primera parte muestra los tipos de datos
generales o los sinónimos de tipos de datos para compatibilidad con SQL-92. La
segunda columna muestra los tipos de datos de SQL Server. La tercera columna
detalla un rango o una descripción y la cuarta columna presenta la cantidad de espacio
de almacenamiento usado.
 
 
Tabla de datos nativos para números y monedas

Nombre - Nombre Rango – Descripción Tamaño de


tipo de SQL- de SQL almacenamien
32 Server to
Enteros
Bit Bit 0, 1 o NULL 1 byte (para cada
columna de 1 a 8
bits)
Big integer Bigint -2^63 a -2^63 – 1. 8 bytes
Integer int -2^31 (-2 147 483 648) a 2^31 -1 (2 4 bytes
147 483 647)
Small integer smallint 2^15 (-32 768) a 2^15 - 1(32 767) 2 bytes
Tiny integer Tinyint 0 a 255 1 bytes
Moneda
Money Money -922 337 203 685 477.5808 a + 922 8 bytes
337 203 685 477.5807
Small Money smallmone -214, 748.3648 a + 214, 748.3647 4 bytes
y
Decimal
Dec,decimal Decimal -10^38 + 1 a -10^38-1 5 a 17 bytes
Numeric Decimal -10^38 + 1 a -10^38-1 5 a 17 bytes
Número Aproximado
Double float -1.79E +308 a -1.79E +308 4 a 8 bytes
Precision
Float float -1.79E +308 a -1.79E +308 4 a 8 bytes
Otros numéricos Cursor Una referencia a un cursor Varía
Rowversion rowversion Un número único de toda la base de 8 bytes
timestamp datos que indica la secuencia en que
tiene lugar las modificaciones en la
base de datos (Rowversion es un
sinónimo de timestamp).
SQL Variant sql_variant Un tipo de datos especial que Varía
permite una sola columna para
almacenar varios tipos de datos
[excepto text, ntext, sql_variant,
image, timestamp, xml,
varchar(max), varbinary(max),
nvarchar(max), y tipos .NET CLR
definidos por el usuario].
Table tabla Un tipo de dato especial que se Varía
utiliza para almacenar un resultado
establecido temporalmente para
procesamiento, sólo puede usarse
para definir variables locales y como
tipo de devolución para funciones
definidas por el usuario.
Uniqueidenfier uniqueiden Un identificador único globalmente 16 bytes
fier (GUID, globally, unique identifier).
Xml xml Un tipo especial de datos, que le Varía
permite almacenar datos, el mercado
de XML se define empleando los
caracteres de texto estándar.

La tabla 2, presenta un resumen de los tipos de datos nativos para fecha, caracteres y
datos binarios. Una vez más, la primera columna muestra los tipos de datos generales
y sinónimos de SQL Server, la tercera columna muestra un rango o una descripción y
la cuarta columna presenta la cantidad de espacios de almacenamiento usado.

Nombre - tipo Nombre Rango – Descripción Tamaño de


de SQL-32 de SQL almacenamiento
Server
Fecha
Datetime datetime 1 de enero de 1753 al 31 de diciembre Dos enteros de 4
de 9999, exactitud de tres centésimas bytes.
de segundos.
Small datetime Smalldateti 1 de enero de 1900 al 06 de junio de Dos enteros de 2
me 2079, exactitud de un minuto. bytes.
Carácter
Character char Datos de Carácter de longitud fija, no 1 bytes de carácter.
unicote con longitud máxima de 8 000
caracteres.
Carácter varying varchar Datos de Carácter de longitud fija, no 1 bytes de carácter.
unicode con longitud máxima de 8 000
caracteres.
Decimal Varchar Datos de longitud variable para 2^31 – 11 bytes de carácter
(max) (2 147 483 647) caracteres. + apuntador de 2
bytes.
Text text Datos de longitud variable, no unicode, 1 bytes de carácter.
con una longitud máxima de 2^31 – 1 (2
147 483 647) caracteres.
Nacional carácter nchar Datos de longitud fija, no Unicote, con 2 bytes por
una longitud máxima de 4 000 carácter.
caracteres.
National char nvarchar Datos de longitud fija, Unicode con una 2 bytes por
varying longitud máxima de 4 000 caracteres. carácter.
Nvarchar(m Datos de longitud fija, Unicote con una 2 bytes por
ax) longitud máxima de 2^31 – 1 (1 073 741 carácter más
823) caracteres. .apuntador de 2
bytes.
National text ntext Datos de longitud fija, Unicode con una 2 bytes por
longitud máxima de para 2^30 – 1 (1 carácter.
073 741 823) caracteres.
Binario
Binary binary Datos de longitud fija, binarios con una Tamaño de los
longitud máxima de 8 000 caracteres. datos es en bytes.
Binary varbinary varbinary Datos de longitud fija, binarios con una Tamaño de los
longitud máxima de 8 000 caracteres. datos es en bytes.
Varbinary Datos de longitud variable para 2^31 – 1 Tamaño de los
(max) (2 147 483 647) bytes. datos en bytes.
Image Image Datos de longitud variable, binarios con Tamaño de los
longitud máxima de 2^31 – 1 (2 147 483 datos es en bytes.
647) bytes.
 
 
Cuando crea o modifica una tabla en SQL Server Mangement Studio, asigna un tipo de
datos nativo al hacer click en la columna Tipo de datos y usar la lista de selección para
seleccionar un tipo de datos. En Transact-SQL, establece el tipo de datos creando la
tabla y llena sus columnas o cuando modifica una tabla y agrega o cambia las
columnas. Se pueden usar comandos de Transact-SQL para crear una tabla y sus
columnas.

USE NuevaBD
CREATE TABLE Clientes
(IDCliente nchar(5) NOT NULL,
NombreEmpresa nvarchar(40) NOT NULL,
NombreoContacto nvarchar(30) NOT NULL,
PuestoContacto nvarchar(30) NOT NULL,
Direccion nvarchar(60) NOT NULL,
Ciudad nvarchar(15) NULL,
Estado nvarchar(15) NULL,
CP nvarchar(5) NULL,
Pais nvarchar(15) NULL,
Telefono nvarchar(24) NULL,
Fax nvarchar(24) NULL)

Conclusión sobre SQL Server

Para concluir con la Introducción a SQL Server 2005, se ha podido observar que
existen varias palabras claves o reservadas de SQL, que tienen uso común, formamos
consultas de SQL para recuperar datos de las bases de datos y se formaron otras
instrucciones de SQL para manipular datos de la base de datos.

Ahora queda a la par de usted, seleccionar el Modelo ADO .NET 2005 u otros, para
permitir que las aplicaciones ya sea en C·# o Visual Basic o quizás Java interactúen
con su base de datos. En el caso de haber recibido ya el curso del IDE .NET 2005,
proceda de forma inmediata al desarrollo de las aplicaciones o platee un problema a
desarrollar, tal como manejo de Entrada/Salida o control de facturación con Bodega u
otros.

 
Búsqueda de algo en un conjunto
 

BETWEEN: permite generar un conjunto de valores de columna que usara para


devolver filas al registro.

SELECT title, ytd_sales


FROM title
WHERE ytd_sales BETWEEN 1000 AND 7000

Mostrara los títulos de ventas que oscilan en el intervalo entre 1000 y 7000.

En este caso, recuperara las filas en el que el valor de una columna se encuentra en
un rango determinado.

Para el siguiente ejemplo, AND es un operador Booleano, utilizado para vincular los
límites inferior y superior del valor de la columna.

BETWEEN se combina con NOT, para filtrar los títulos con malas ventas, mostrando
únicamente los que han vendido más de 5000 volúmenes.

SELECT title, ytd_sales


FROM title
WHERE ytd_sales NOT BETWEEN 0 AND 5000

Búsqueda de IN, ANY, ALL o SOME

IN: permite que se use una consulta secundaria para controlar la generación de un
conjunto de resultados de otra manera. Además, busca el valor de una columna en la
lista de valores.

SELECT au_lname, au_fname


FROM authors
WHERE au_id IN (SELEC au_id
FROM titleauthor
WHERE royaltyper = 10)
Esta consulta selecciona el nombre y apellido del autor de la tabla authors.

La clausula WHERE establece que la identificación del autor debe encontrarse en la


lista generada por la consulta secundaria.

En este caso, la lista será de autores cuyo porcentaje de títulos promovidos de forma
gratis es el 10%.

DETALLE:

IN: no requiere el uso de consultas secundarias. Se emplea una lista de valores


separados por coma y encerrados entre paréntesis.

ALL: requiere que la fila actual de la consulta principal coincida con todos los
resultados de la consulta secundaria de la manera especificada.

En la siguiente consulta, se busca a los autores en PUBS (base de datos gratis de MS


SQL Server) que no viven en alguna ciudad en que se tenga oficina se recupera la
ciudad, para que se sepa donde viven esos autores.

SELECT au_lname, city


FROM authors
WHERE city <> ALL (SELEC city FROM publishers)
-- Se extrae de una sola tabla, authors.

La consulta WHERE requiere que se revise la columna city en la consulta principal


contra la columna city en la columna secundaria.

ANY: se puede comparar cualquiera de los valores que la consulta secundaria


devuelva. Por tanto, se puede encontrar los autores que viven en una ciudad en que
exista oficina.

SELECT au_lname, city


FROM authors
WHERE city = ANY (SELEC city FROM publishers)
-- Lista de autores que viven en ciudades que existen oficinas.
NOTA:

Los operadores ANY y SOME tienen funciones equivalentes. Significa lo mismo, usted
puede usar la frase más conveniente o intuitiva.

Búsqueda de lo que existe

En muchas ocasiones resulta conveniente saber si un conjunto de filas se encuentra en


la base de datos. Esta tarea se realiza con la palabra clave EXISTS.

Por ej. Encontrar a los autores que tienen titulo en la base de datos PUBS (títulos
publicados).

SELECT *
FROM authors
WHERE EXISTS (SELEC * FROM titles INNER JOIN titleauthor ON tittle.tittle_ID =
tittleauthor.title_ID WHERE titleauthor.au_ID = authors.au_ID)
-- EXISTS exige el uso de una consulta secundaria, que no es otra cosa que una
-- consulta dentro de una consulta.

Si una relacional condicional entre dos consultas, la consulta secundaria siempre


devolverá filas. Así como la consulta principal y la secundaria serán independientes
entre sí.

Tareas:
 

Para cada tabla que usted a definido en su proyecto, debe crear cinco instrucciones
combinando las clausulas antes vistas (realizar estas instrucciones tienen un valor del
15% del laboratorio #2).
UNIDAD II: USO de Funciones.
 

Funciones para Control de fecha

Manejo de fechas para presentar datos, se inicia con la prueba de las funciones
escalares de Fecha y Hora de SQL:

Datediff (datepart, stardate, enddate)

-- Obtener la cantidad de Días


Declare @FechaInicio datetime,
@FechaFin datetime

Set @FechaInicio = '01-01-2006'


Set @FechaFin = '31-12-2006'

Select Datediff (day, @FechaInicio, @FechaFin) As CantidadDias

-- Obtener la cantidad de Meses

Select DateDiff (Month, @FechaInicio,@FechaFin) As CantMeses

-- Obtener la cantidad de Días del Año


Select DateDiff (dayofyear, @FechaInicio,@FechaFin) As CantMeses

-- Obtener la cantidad de Semanas transcurridas entre las dos fechas


Select DateDiff (week, @FechaInicio,@FechaFin) As CantMeses

-- Permite establecer el primer día de la semana


Set DateFirst 5
Select@@DateFirst As 'Primer Día',
DatePart(Weekday, GetDate() ) As 'Dia de la semana a la fecha actual'

COUNT: el propósito de COUNT es devolver la cuenta de elementos en un grupo


definido por COUNT o por GROUP BY.
--La cantidad distinta de ordenes OrdenID
Select COUNT(Distinct OrderID) From [Order Details]

MIN: Devuelve el mínimo valor asociado con una expresión.


--Menor Nombre de Empleado de la tabla Employees de la base de datos
--Northwind.
Select MIN(FirstName)as MenorNombre From Employees

MAX: Devuelve el máximo valor asociado con una expresión.


--Máximo Nombre de Empleado de la Tabla Employees de la base de datos
Northwind.
Select MAX(FirstName)as MayorNombre From Employees

AVG: Devuelve el promedio de los valores de un grupo definido por AVG o por GROUP
BY.

/*----- Promedio de Precios de los Productos. ------*/


Select AVG (UnitsInStock) As PrecioPromedio From Products

Funciones de Configuracion
 
Connections: Con esta función se puede ver todas las conexiones activas en el
Servidor de SQL Server 2005. 
 
-- Probando las Funciones de Configuración
-- @@ CONNECTIONS: Cantidad de Conexiones Activas en este momento
Select @@Connections

Language: Retorna el lenguaje que está utilizando el servidor de SQL Server 2005.

/*@@ Languaje: Retorna el lenguaje que se está utilizando*/


Select @@Language as lenguajedelServidor
ServerName: Retorna el Nombre del Servidor que está actualmente como Gestor de la
Base de Datos en SQL Server 2005.

/* @@ ServerName: Nombre del Servidor*/


Select @@ServerName As NombredelServidor

Version: Retorna la versión de SQL Server que actualmente está siendo utilizada.
/*** @@Version: Version del Sql Server ***/
Select @@Version as version

Otras Funciones para Manejo de cadenas

-- La cadena sin espacios en Blanco de la Izquierda


Select LTRIM(' Giovanni Sáenz') As EliminaEspaciosIzquierda

-- La cadena sin espacios en Blanco de la Izquierda


Select LTRIM(' Giovanni Sáenz ') As EliminaEspaciosIzquierda

--Observar lo que resultara de la operación.


Select LTRIM('Giovanni Sáenz') As Cadena

--Reemplazar un carácter por otro.


Select REPLACE('Giovanni Sáenz',' ','') As EliminaEspacioEnMedio

--Encontrar el largo de la cadena.


Select LEN('Giovanni Sáenz ') As LongitudCadena

--Observar lo que sucede en este caso.


-- Solo mostrara 'Giov'
Select SubString('Giovanni Sáenz', 1 , 4) As Mayuscula

-- Convertir la cadena en Mayúscula.


Select Upper('Giovanni Sáenz') As Mayuscula

--Convertir la cadena en Minúscula.


Select Lower ('GioVannI SAenZ') As Minuscula
Tarea:
 

Ahora introduzca la siguiente secuencia de comandos y diga cuál es el resultado.

IF EXISTS(SELECT name
FROM sysobjects
WHERE name = N'meses'
AND type = 'U')
DROP TABLE meses
GO

create table meses (


[numero de mes ] nvarchar(2),
[nombre de mes] nvarchar(15)
)

delete meses
declare @i numeric, @fecha datetime
set @fecha='2009-01-01'
set @i=1
Print 'Meses del anio'
Print '-----------------'
while @i<13
begin
insert into meses select cast(@i as char(2)), datename(month, @fecha)
set @i=@i+1
set @fecha=dateadd(month,1,@fecha)
end

select * from meses


Funciones definas por el Usuario
Objetivos:
 

1.- Estudiar las reglas que se establecen para el uso de clausulas y palabras
reservadas para la creación de funciones creadas por el usuario en el Transact de
SQL Server 2005.

2.- Mediante ejemplos puntuales, mostrar el uso de funciones creadas por el usuario,
las cuales deben ser programadas para el proyecto de curso.

3.- Desarrollar funciones creadas por el usuario en el transact de SQL Server para ser
incorporadas al proyecto.

Las funciones son utilizadas para hacer búsquedas o rastreos de datos de manera
profunda ya sea en tablas en la base de datos. En este momento se procederá a
explicar las reglas que se deben tener en consideración tanto para la creación y
ejecución de las funciones en SQL SERVER 2005.

Funciones de tipo Escalar

Ir a la parte superior de la venta y buscar “nueva consulta”, ahí usted agregara el


código correspondiente a la función:

Definición de la Función

Una función debe iniciar con la palabra reservada CREATE, a continuación


FUNCTION, posteriormente y en la misma línea, y entre corchetes el nombre de la
base de datos, el nombre del esquema y el nombre de la función, los parámetros irán
entre paréntesis, luego el tipo de dato de retorno con RETURNS, así como el tipo de
dato que se mostrara en pantalla. Delimitando el bloque de la función esta el BEGIN
que es la marca de origen de las instrucciones y END que es el final del bloque de las
instrucciones. Es importante colocar un RETURN (sin la letra “S”), la cual representa el
dato que se pasara al mundo exterior.

CREATE FUNCTION dbo.fncCalculaEdad_Parametro (@pNombreCompleto


Varchar(120),
@pFechaNacimiento Datetime,
@PFechaActual Datetime)
RETURNS Varchar(240) AS
BEGIN

Declare @NombreEdad varchar(240)

Set @NombreEdad = @pnombreCompleto + ' tiene la edad de ' +


Cast(DATEDIFF(YEAR,@pfechanacimiento, @pfechaactual) as Varchar) + '
anios '
return (@NombreEdad)
END

Tarea:

Intérprete que es lo que hacen estas líneas (incorpore comentarios), si se antecede


antes de CREATE FUNCTIOS:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fncCalculaEdad]')


and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fncCalculaEdad]
GO

Al ejecutarse la Instrucción, se agrega como parte de las funciones:


 
 
 

Ejecución de la Función

La Ejecución de la función, se realiza con la siguiente consulta:

Select dbo.fncCalculaEdad_Parametro('Jose Marcos Zelaya Nicaragua', '24/06/1983',


getDATE())

Función que retorna una Tabla

A diferencia del tipo de función escalar (caso anterior), aquí se retorna una tabla, la
cual mostrara dos campos CategoryId y CategoryN. Lo interesante de este tipo de
funcion es el trato que se le da a los datos.

CREATE FUNCTION [dbo].[FncGetCategoriasLineal2]


(
@categoria nvarchar(15)
)
RETURNS TABLE
Return (select CategoryId, CategoryName From Categories where CategoryName =
@categoria)

La Primera Forma para Correr la Funcion es:

La forma de ejecucion es como una consulta, donde se usa la palabra Select, luego las
columnas que desea visualizar, despues From y entre corchetes la base de datos, el
objeto y nombre de la funcion, como en este caso existe parametro, este debe ir entre
parentesis, ver a continuacion:

SELECT * FROM [Northwin].[dbo].[FncGetCategoriasLineal2] ('Confections')

Segunda forma para correr la Funcion es:

La segunda forma, es utilizando variables y pasando el valor a esta misma:

 
Declare @categoria as Varchar(15)
Set @categoria = 'Confections'

SELECT * FROM [Northwind].[dbo].[FncGetCategoriasLineal2] (@Categoria)


 
 
 
Si se observa con detalle, para ambos casos, el resultado es el mismo, lo que varía es
como se invoca la función:
 

   
UNIDAD III: Crear Procedimientos Almacenados:

Definición del Procedimiento Almacenado (con Parámetro)

Los procedimientos almacenados son instrucciones que son programadas en un


bloque, la programación de estos es trata como lo hacen los lenguajes de
programación que cuentan con PROCEDURE, como Pascal. Las razones por las
cuales son muy utilizados los procedimientos almacenados son las siguientes:

1. Los procedimientos almacenados permiten la flexibilidad para el desarrollo de


las instrucciones cliente – servidor. Los procedimientos almacenados se guardan
en el servidor y no se repiten en cada cliente. Con el avance tecnológico, así
como distribuciones y aplicaciones Web existe la posibilidad de poder ser
invocados de forma remota.

2. En el caso de las aplicaciones que de desarrollaran en la asignatura de


Administradores de bases de datos, se ha definido que el lenguaje de
aplicaciones es C# o Visual Basic o Java o PHP, en el caso de los dos primeros,
Studio .NET 2005 o 2008 permite se puede manejar, modificar, ver e invocar
directamente desde el mismo software, sin necesidad de estar con SQL Server.
Dando la oportunidad de compilar estas instrucciones de dos maneras y
conservando la robustez que ofrece como gestor de bases de datos de los
procedimientos que requieren el seguimiento constante.

3. Los procedimientos almacenados permiten el desarrollo de operaciones y


funciones más complejas, las cuales se pueden ampliar utilizando el reportorio
de instrucciones del transact de SQL Server.

El primer paso, es buscar donde está la programación de la base de datos, en este


caso, es la base de datos Northwind, luego, hacer click derecho sobre procedimientos
almacenados y crear uno nuevo:

Definición de los Procedimientos Almacenados

Un procedimiento almacenado debe iniciar con la palabra reservada CREATE, a


continuación PROCEDURE, posteriormente y en la misma línea, y entre corchetes el
nombre de la base de datos, el nombre del esquema y el nombre del Procedimiento
Almacenado, los parámetros irán entre paréntesis. Delimitando el bloque del
procedimiento almacenado esta el BEGIN que es la marca de origen de las
instrucciones y END que es el final del bloque de las instrucciones.
CREATE PROCEDURE [dbo].[spGetNombre_Parametro]
(@pNombre as Varchar(120)) AS
Begin
print @pNombre
End

Es recomendable para distinguir de otras instrucciones, antecederle las abreviatura


SPGET y luego el nombre que se desea asignar al procedimiento almacenado, donde
SP es de las sigla en Ingles stored procedures y GET lo que se desea es obtener un
resultado. Es decir para este caso SPGETNombre_Parametro.

Crear un procedimiento almacenado

En la grafica que se muestra a continuación, es una opción para crear procedimientos


almacenados utilizando el asistente de SQL Server, la otra opción es hacerlo con el
Query Analyzer.

Sin más que agregar, proceda a ver las siguientes graficas y programe sus
procedimientos almacenados:
 

Sobre la ventana que aparece, agregara el siguiente código:

El código a programar es el que se muestra a continuación:

CREATE PROCEDURE [dbo].[spGetNombre_Parametro]


(@pNombre as Varchar(120)) AS
Begin
print @pNombre
End
Llamado para Ejecutar el Procedimiento Almacenado

Una vez creado el procedimiento almacenado, solo queda proceder con la ejecución de
ese procedimiento almacenado, existen varias formas para lograr esta tarea, a
continuación le presentan estas opciones:

El código para la ejecucion del procedimiento almacenado, es antecederlela palabra


reservado Exec (esta es una abreviatura), la otra forma es utilizar la palabra completa
Execute, como se muestra a continuacion:

Exec dbo.spGetNombre_Parametro 'Giovanni Saenz'

Resultado del Procedimiento Almacenado

 
 

Otra forma de ejecutar este procedimiento almacenado es:

Execute dbo.spGetNombre_Parametro 'Giovanni Saenz'

Otra forma de correr el procedimiento almacenado es utilizar el asistente de SQL


Server, fíjese en la siguiente figura y observe lo que debe realizar para la ejecución:
 

Los pasos son los siguientes:

1. Colocarse sobre el procedimiento almacenado, dar click derecho.

2. Seleccionar que desea trabajar con el Script.

3. Busque la opción del Script la opción Execute to y dar nueva ventana.

Entonces le aparecerá el siguiente código, el cual usted simplemente deb hacer ciertos
ajustes y compile:

DECLARE @RC int


DECLARE @pNombre varchar(120)

-- TODO: Establezca los valores de los parámetros aquí.

SET @pNombre ='Giovanni Saenz'

EXECUTE @RC = spGetNombre_Parametro @pNombre


Ejemplo #2

Ahora recordemos un poco de los Procedimientos Almacenados que se han


desarrollado en SQL Server 2005.

Vamos al estilo Flash Back, un procedimiento almacenado, debe tener:

a.- Un nombre.
b.- Parámetros, esto es opcional.
c.- Declaraciones de Datos, esto también es opcional.
d.- El bloque donde programaremos las instrucciones, delimitado por un Begin – End.
Si lo recordáis, entonces a vosotros, se nos presenta el siguiente ejemplo:

CREATE PROCEDURE [dbo].[spgetLibros]


AS
BEGIN
SELECT dbo.Libro.Nombre_Libros, dbo.Editorial.Nombre_Editorial
FROM dbo.Libro INNER JOIN
dbo.Editorial ON dbo.Libro.Id_Editorial = dbo.Editorial.Id_Editorial
END

Para Ejecutarse en SQL Server 2005

En la Primera forma y la más Sencilla:

Exec spgetLibros

En la forma como segunda opción:

Exec [dbo].[spgetLibros]

Y en la tercera forma, la cual puede generar otras versiones parecida para la corrida:

Execute spgetLibros
 
UNIDAD IV: USO de VISTAS

Objetivos:

1. Estudiar las reglas que se definen para el uso de instrucciones para el uso de
Vistas en SQL Server 2005 0 2008.

2. Crear Vistas para presentar datos de forma mas propicia para los usuarios y
necesidades que son parte del desarrollo del proyecto de curso de
Administradores de Bases de Datos.

3. Mediante ejemplos puntuales interactuar y hacer ajustes a las instrucciones para


iniciar con la programación de las vistas que serán parte del proyecto de curso
de Administradores de bases de datos.

Las Vistas pueden considerarse como tablas virtuales porque los conjuntos de
resultados regresados por vistas tienen la misma forma general que las tablas,
columnas y filas, y puede hacerse referencia a las vistas de manera muy parecida a las
tablas de consultas. Pueden crearse varios tipos de Vistas. La mayor parte de las vistas
se usan como datos de unión de varias tablas para que pueda accederse a un solo
conjunto de resultados.

Los desarrolladores opinan que no es lo más recomendable (el uso de ellas), las
razones son las siguientes:

1. Hay que crearlas bajo pedido, cuando se tiene acceso a ellas. Si esa consulta
tiene gran demanda de uso, se vea críticamente afectado el desempeño. El
proceso de creación de vista, se debe unir al plan de ejecución de la consulta
que acceso a dicha vista. Hay que trabajar con el plan de ejecución.

2. Cuando una vista tiene acceso a otra vista, es de esperarse un aumento en el


retraso del desempeño.

A la conversión de la vista en un caso para ponerla a disposición del usuario se le


domina Materialización.
Sin embargo, las vistas son muy útiles, hay que saber tratar los problemas y manejarlos
en el momento que se presente, las ventajas son:

1. Presentara datos provenientes de varias tablas, porque la consulta puede


contener uniones.

2. Proporcionar fácilmente acceso de solo lectura de datos.

3. Podrá busca valores en tabla mediante una vista, y después de usar IN para
comprobar si esos valores son relevantes para otra consulta.

Creación de VISTA
 
Las vistas tienen estructura, la cual se detalla a continuación:

CREATE VIEW [NuevaBD].[dbo].[Meses_del_Anno] As

Toda vista debe iniciar con la palabra CREATE, luego la palabra VIEW, posteriormente
entre corchetes, el nombre de la base de la base de datos, el nombre del esquema y el
nombre de la vista, como puede observar, en este caso es “Meses_del_Anno” y
finalizando con AS.

Si una vista se desea modificar las instrucciones o actualizar algún tipo de instrucción y
se conserva el mismo nombre, se debe cambiar CREAT VIEW por ALTER VIEW (una
vez creada).

Dentro de la vista, y como parte del desarrollo o cuerpo de esta se encuentra para este
ejemplo:

--Considerando que la tabla meses ya fue creada anteriormente.


SELECT [numero de mes ], [nombre de mes]
FROM dbo.meses

Entonces, ahora que ya conoce los pasos que debe seguir, vea la consulta completa a
continuación:

CREATE VIEW [NuevaBD].[dbo].[Meses_del_Anno] As


--Considerando que la tabla meses ya fue creada anteriormente.
SELECT [numero de mes ], [nombre de mes]
FROM dbo.meses

Ejecución de la vista

Para la ejecución de la vista en el Query Analyzer, debe ser de la siguiente manera:

/*Es con SELECT y describiendo las columnas que se desean mostrar, luego el
FROM es el nombre de la vista. */
SELECT [numero de mes ], [nombre de mes]
FROM [NuevaBD].[dbo].[Meses_del_Anno]

Otro Ejemplo de Vistas

CREATE VIEW Ventas.VistaCliente AS


SELECT id_Cliente As Cuenta, Cliente Apellido AS [Cliente APELLIDO],
Cliente_Nombre AS [Cliente Nombre], estado AS Zona
FROM Ventas.Clientes
WHERE (estado = ‘BC’) OR (estado = ‘DF’) OR (estado = ‘PUE’)

Tarea:

En este momento a usted se le presenta una serie de instrucciones, las cuales debe
interpretar, agregarle comentarios, compilarlas, así como ejecutarla.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vwDetalleOrdenes]')


and OBJECTPROPERTY(id, N'IsView') = 1)

drop view [dbo].[vwDetalleOrdenes]


GO

--Continua en la siguiente pagina:

CREATE VIEW dbo.vwDetalleOrdenes


AS
SELECT TOP 100 PERCENT dbo.[Order Details].OrderID,
dbo.Customers.CustomerID, dbo.Employees.FirstName + dbo.Employees.LastName
AS Empleado,
dbo.Customers.CompanyName AS NombreCompania,
dbo.Orders.OrderDate, dbo.[Order Details].ProductID, dbo.Products.ProductName,
dbo.Categories.CategoryName, dbo.[Order Details].Quantity, dbo.[Order
Details].UnitPrice,
dbo.[Order Details].Quantity * dbo.[Order Details].UnitPrice AS CostoTotal
FROM dbo.[Order Details] INNER JOIN
dbo.Products ON dbo.[Order Details].ProductID = dbo.Products.ProductID
INNER JOIN
dbo.Categories ON dbo.Products.CategoryID =
dbo.Categories.CategoryID INNER JOIN
dbo.Orders ON dbo.[Order Details].OrderID = dbo.Orders.OrderID INNER
JOIN
dbo.Customers ON dbo.Orders.CustomerID =
dbo.Customers.CustomerID INNER JOIN
dbo.Employees ON dbo.Orders.EmployeeID =
dbo.Employees.EmployeeID
ORDER BY dbo.[Order Details].OrderID, dbo.[Order Details].ProductID

GO

 
Laboratorio #1
 

Definición del proyecto de Administradores de Bases


de datos
 

Objetivos:
 
1. Crear toda la justificación y soporte documental para el desarrollo de un proyecto
que venga a solucionar un problema a una empresa o institución, la cual desea
automatizar sus actividades o tareas de producción.

2. Definir el problema a resolver, delimitando las actividades que se deben


desarrollar para implementar una aplicación en un lenguaje de programación y
con un gestor de bases de datos de última generación, el cual debe ser definido
a partir de este momento y como parte de la información documental.

3. Detallar todas las actividades y datos que la empresa realiza como parte del
problema planteado y que posteriormente en el segundo laboratorio será el
parámetro para el inicio de la creación de las instrucciones.

Desarrollo

Con el fin de orientar a los estudiantes, así como tener de manera efectiva y concreta la
recopilación de datos y tareas que son necesarias para poder implementar una
aplicación que incluye una base de datos, que vendrá a resolver un problema, que se
está llevando manualmente o no se ha terminado de automatizar.

Los puntos que se definen para poder presentar oficialmente el proyecto son:
1. Índice
2. Objetivos

3. Introducción

4. Definición de la Empresa

5. Condiciones Actuales
Equipo Disponible

6. Beneficios de Automatizar

7. Restricciones del Sistema

8. Descripción del Proceso


a. Proceso Manual
b. Proceso Automatizado

9. REQUERIMIENTOS DEL SISTEMA

10. DIAGRAMA DE CONTEXTO

Considerando que la clase que está a la par de la asignatura es Economía de


proyectos informáticos, las orientaciones deben ser orientadas para poder desarrollar el
mismo proyecto y no girar esfuerzos a dos problemas, la recomendación es que para
ambas clases sea el mismo proyecto.

Otro detalle, es que para poder seguir en el curso, el presente laboratorio representa el
pase para pasar al siguiente laboratorio #2. De no ser así, no tiene derecho a acumular
20 puntos de la nota correspondiente al primer parcial, el cual es 35 puntos. Además,
este proyecto no debe ser ficticio.

A la par de este documento, se anexa la información ejemplo de un proyecto, así como


la estructura y todos los detalles que se desean.

Bibliografía:

www.docentes.uni.edu.ni/fec/Giovanni.Saenz
Trabajando con DDL y DML.

Práctica No.2. Utilizando la sintaxis de DDL y DML para llevar a cabo


acciones de creado de TABLAS, actualización de tablas, inserción,
modificación y eliminación de registros.

O
OBBJJEETTIIVVO
OD AP
DEE LLA PRRÁ
ÁCCTTIIC
CAA::

Con esta guía se pretende dar a conocer la sintaxis del Lenguaje de


definición de Datos (DDL), Lenguaje de Control de datos (DCL), y
Lenguaje de Modelación de Datos (DML)

Pasos a seguir:

En el SQL Query Analyzer, tenga seleccionado la base de datos


Northwind.

Paso No.1: Crear una tabla llamada ScpDigitacionProyecto, antes debe verificarse que
exista la tabla ScpDigitacionProyecto.

if exists (Select * From dbo.sysobjects


Where id = object_id ('[dbo].[ScpDigitacionProyecto]') and
OBJECTPROPERTY (id, 'IsUserTable') = 1)
Drop table [dbo].[ScpDigitacionProyecto]
GO

 
 

   
Paso No.2: Crear la tabla ScpDigitacionProyecto con la siguiente estructura.

CREATE TABLE [dbo].[ScpDigitacionProyecto] (


ScpDigitacionProyecto_ID int IDENTITY (1, 1) PRIMARY KEY CLUSTERED
NOT NULL ,
MesAsistencia smallint NULL ,
AnioAsistencia int NULL ,
Asistencia char (2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,
objProyectoID int NOT NULL
) ON [PRIMARY]
GO

Paso No.3: Visualizar en modo texto la estructura de la tabla Notas

SELECT * From ScpDigitacionProyecto

 
 

Paso No.4: Modificar la tabla ScpDigitacionProyecto, al agregar las columnas Fecha de


tipo Datetime y MesPrueba de tipo int.

ALTER TABLE [dbo].[ScpDigitacionProyecto]


ADD Fecha Datetime NULL,
MesPrueba Int
GO

Para verificar los valores de la Tabla, vuelva a ejecutar:


SELECT * From ScpDigitacionProyecto

 
 

Paso No.5: Eliminar de la tabla ScpDigitacionProyecto eliminar la columna


MesPrueba.

ALTER TABLE [dbo].[ScpDigitacionProyecto]


DROP Column MesPrueba
GO

Para verificar los valores de la Tabla, vuelva a ejecutar:

SELECT * From ScpDigitacionProyecto

 
 

Paso No.6: Insertando registros en Digitacion Proyecto.

INSERT INTO ScpDigitacionProyecto


(MesAsistencia, AnioAsistencia,
Asistencia , objProyectoID)

VALUES
(1, 2005,
'B1', 65)

INSERT INTO ScpDigitacionProyecto


(MesAsistencia, AnioAsistencia ,
Asistencia , objProyectoID)
VALUES
(2, 2005,
'B1', 65)

INSERT INTO ScpDigitacionProyecto


(MesAsistencia, AnioAsistencia ,
Asistencia, objProyectoID)
VALUES
(3, 2005,
'B1', 65)

INSERT INTO ScpDigitacionProyecto


(MesAsistencia, AnioAsistencia ,
Asistencia , objProyectoID)
VALUES
(4, 2005,
'B1', 65)

INSERT INTO ScpDigitacionProyecto

(MesAsistencia, AnioAsistencia ,
Asistencia , objProyectoID)
VALUES
(5, 2005,
'B1', 65)

INSERT INTO ScpDigitacionProyecto


(MesAsistencia, AnioAsistencia ,
Asistencia , objProyectoID)
VALUES
(6, 2005,
'B1', 65)

INSERT INTO ScpDigitacionProyecto


(MesAsistencia, AnioAsistencia ,
Asistencia , objProyectoID)
VALUES
(7, 2005,
'B1', 65)
INSERT INTO ScpDigitacionProyecto
(MesAsistencia, AnioAsistencia ,
Asistencia , objProyectoID)
VALUES
(8, 2005,
'B1', 65)

INSERT INTO ScpDigitacionProyecto


(MesAsistencia, AnioAsistencia ,
Asistencia , objProyectoID)
VALUES
(9, 2005,
'B1', 65)

Al Ejecutar el código, se genera el siguiente mensaje:

Para verificar los valores de la Tabla, vuelva a ejecutar: 
SELECT * From ScpDigitacionProyecto

Paso No.7: Crear una tabla a partir del contenido y la estructura de la tabla

ScpDigitacionProyecto

Select *
Into ScpDigitacionProyectoCopia
From ScpDigitacionProyecto
 
 

 
Paso No.8: Insertando los registros de la tabla ScpDigitacionProyectoCopia a
ScpDigitacionProyecto.

INSERT Into ScpDigitacionProyecto


(MesAsistencia, AnioAsistencia ,
Asistencia , objProyectoID)

(Select MesAsistencia, AnioAsistencia,


Asistencia, ObjProyectoID
From ScpDigitacionProyectoCopia)

Paso No.9: Insertando los registros de la tabla ScpDigitacionProyectoCopia a


ScpDigitacionProyecto

INSERT Into ScpDigitacionProyecto


(MesAsistencia, AnioAsistencia ,
Asistencia , objProyectoID)
(Select MesAsistencia, AnioAsistencia,
Asistencia, ObjProyectoID

From ScpDigitacionProyectoCopia)

Para mostrar el contenido de Ambas Tablas:

SELECT * From ScpDigitacionProyecto


SELECT * From ScpDigitacionProyectoCopia

 
Paso No.10: Actualizar la tabla ScpDigitacionProyecto al agregar un constraint
(Representa una restricción que se puede imponer a uno o varios objetos DataColumn)
para la columna ScpDigitacionProyectoID

ALTER TABLE ScpDigitacionProyecto WITH NOCHECK


ADD CONSTRAINT Mes_Check CHECK (MesAsistencia >=1)
GO
EXEC sp_help ScpDigitacionProyecto
GO

Paso No.11: Compruebe que el constraint MesAsistencia funciona. Para esto vaya al
Enterprise Manager e Intente ingresar un registro con un valor menor que 1 para el
campo MesAsistencia.

Paso No.12: Elminar el Constraint creado para el MesAsistencia.

ALTER TABLE ScpDigitacionProyecto


DROP CONSTRAINT Mes_Check
 

Paso No.13: Alterar una tabla para Modificar el tipo de dato de un campo. EN este
caso se cambio el tamaño del campo Asistencia a 10 caracteres, además se puso
requerido.

ALTER TABLE [dbo].[ScpDigitacionProyecto]


ALTER COLUMN Asistencia Char(10) NOT NULL

Muestre la Tabla:

Select * From ScpDigitacionProyecto

Paso No.14: Visualizar el contenido de la tabla de Digitación Proyecto.

Select * From ScpDigitacionProyecto


Paso No.15: Cambiar el valor del anioasistencia 2005 a 2006 para esto hay que buscar
todos los registros de digitación proyecto donde AnioAsistencia = 2005.

UPDATE ScpDigitacionProyecto
Set AnioAsistencia = 2006
Where AnioAsistencia = 2005

Paso No.16: Compruebe que la actualización se llevo a cabo de forma satisfactoria


para esto en el enterprise manager o en otra ventana del query analyzer haga un select
a la tabla ScpDigitacionProyecto.
Guía de Laboratorio #2

Trabajando en el Transact de SQL Server 2005 0 2008

Objetivos:
 
1. Crear las instrucciones necesarias para el desarrollo y soporte documental para
el proyecto que vendrá a solucionar un problema a una empresa o institución, la
cual desea automatizar sus actividades o tareas de producción.

2. Definir las actividades que se plantearon en el laboratorio #1 y que con el gestor


de bases de datos deben irse agregando a la base de datos.

3. Llevar a instrucciones transact todas las actividades y datos que la empresa


realiza como parte del problema planteado y que posteriormente en el tercer
laboratorio será el parámetro para el inicio de la creación y presentación de la
capa de aplicación y presentación de datos.

Desarrollo

Esta actividad se debe realizar con el proyecto que está actualmente asignado, es
por tal motivo que se define las siguientes actividades a desarrollar.

Ahora que tiene dos posibles formas de presentar Datos y hacer rastreos o
búsquedas, hacer los ajustes a sus proyectos y presente:

a.- Procedimientos Almacenados (es primordial y necesario para el desarrollo


práctico y crear habilidades se definen diez procedimientos con Parámetros y
cinco sin parámetros por tabla).
b.- Funciones recordar que estas pueden ser escalares o retornen tabla (Al igual
que el caso anterior, es válido la cantidad, así mismo la distribución).

c.- Deben presentar cada estudiantes ocho Triggers (esto se deben programar en
cada tabla, la definición y como se implemente, eso depende del grupo).

d.- Se deben Cumplir todos los incisos anteriores, al igual de la cantidad de


registros y todo lo que se refiere a la Información que se debe Administrar en las
Tablas.
 

Bibliografía:
 

1.- Titulo: Aprenda Ya Visual Basic .Net.


Autor: Michael Halvorson.
Editorial: Mc Graw Hill.
ISBN: 970-10-5897-6

2.- Titulo: Aprenda Ya SQL Server 2005.


Autor: Michael Halvorson.
Editorial: Mc Graw Hill.

3.- Titulo: Aprendiendo Visual Basic .Net.


Autor: Duncan Mackenzie, Kent Sharkey.
Editorial: Prentice Hall.
ISBN: 970-26-0379-X.

4.- Titulo: Fundamentos de SQL – Conocimientos Esenciales para Programadores.


Autor: Forrest Houlette.
Editorial: Mc Graw Hill.
ISBN: 970-10-3895-9.

5.- Titulo: Curso de SQL Server y Visual Basic .Net.


Autor: Ing. Glenda Barrios.
Editorial:. Ing. Glenda Barrios
ISBN: UNI – FEC, Ingeniería en Computación. 

You might also like