Manual SQL PDF
Manual SQL PDF
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Contenido
INTRODUCCIÓN. ..................................................................................................................3
INSTALACIÓN DEL SQL SERVER 2008.....................................................................................4
INGRESAR AL SQL SERVER 2008 .......................................................................................... 19
CONSULTAS EN LA BASE DATOS NORTHWIND .................................................................... 22
1. Crear una consulta ..................................................................................................... 22
2. Ejecutar consulta ........................................................................................................ 23
3. SELECT ....................................................................................................................... 24
4. FROM ........................................................................................................................ 24
5. WHERE....................................................................................................................... 24
6. ORDERDATE: .............................................................................................................. 26
7. DATEPART.................................................................................................................. 26
8. ORDER BY .................................................................................................................. 27
9. LIKE............................................................................................................................ 28
10. TOP ........................................................................................................................ 28
Ejercicios ........................................................................................................................... 30
11. INSERT ................................................................................................................... 33
12. UPDATE .................................................................................................................. 34
13. DELETE ................................................................................................................... 36
14. DISTINCT ................................................................................................................ 37
15. INNER JOIN............................................................................................................. 37
16. UNION ................................................................................................................... 40
17. SELECT INTO ........................................................................................................... 41
18. SUBCONSULTAS ...................................................................................................... 41
19. GROUP BY .............................................................................................................. 41
Ejercicios ........................................................................................................................... 43
PROCEDIMIENTOS ALMACENADOS .................................................................................... 46
REPORTING SERVICES ........................................................................................................ 60
RESTRICCIONES EN SQL .................................................................................................... 127
FUNCIONES ..................................................................................................................... 140
BASE DE DATOS II
2
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
SQL son las siglas de “Structured Query Language” que quiere decir “Lenguajes de
Solicitud Estructurado”. SQL SERVER es un Gestor de Base Datos de Microsoft, esta
versión 2008, muestra grandes avances con respecto a sus predecesora (SQL Server
2005); comienza ser un serio competidor para sistemas como ORACLE, orientados a
base de datos de gran tamaño.
SQL Server 2008 incluye una gran cantidad de nuevas características que permiten una
gestión más racional y eficaz del mismo, aumentan el rendimiento, la escalabilidad y la
estabilidad del servidor y, permiten una configuración avanzada a nivel de servicios,
seguridad del servidor, etc.
Entre las nuevas características, quizás la más llamativa sea el soporte para
compatibilidad con .NET.
Todas estas características se agrupan dentro de SQL Server 2008 clasificadas según
sus distintas ediciones:
Express: Esta edición es la evolución del antiguo MSDE, la versión gratuita de SQL
Server 2000. Sigue siendo gratuita y, aunque limitada, incorpora un pequeño
entorno gráfico de administración y permite un máximo de 50 conexiones
concurrentes (suficiente para cualquier entorno pequeño).
BASE DE DATOS II
3
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Developer: Esta versión contiene todas las opciones, pero al ser una versión
destinada a entornos de prueba y laboratorio, contiene limitaciones en cuanto a
CPUs soportadas y a licencias.
4
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
Ahora, vaya al tab “Installation”, y allí seleccione la opción “New SQL Server
stand alone installation or add features to an existing installation”
5
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
6
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
7
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ahora, deberá seleccionar las características de SQL server 2008 que desea
BASE DE DATOS II
8
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
9
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ahora, usted deberá configurar las cuentas con las cuales se ejecutará el
servicio; la recomendación es utilizar diferentes cuentas, sin embargo, en la
imagen de la derecha usted puede observar cómo una cuenta es utilizada para
ejecutar más de un servicio, en la parte inferior podría seleccionar la opción
para utilizar la misma cuenta para todos los servicios, en cuyo caso solamente
tendrá que escribir credenciales una vez, pero no estará cumpliendo con
buenas prácticas de seguridad. Después de configurar las cuentas, haga
clic en el tab “Collation”
BASE DE DATOS II
10
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
11
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
12
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ahora revise las ubicaciones físicas donde va a quedar instalado SQL Server y
cada uno de sus componentes, Haga clic en Next
BASE DE DATOS II
13
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
14
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ahora, seleccione las opciones para que se envíen reportes de errores y de uso
de características hacia Microsoft y haga clic en “Next”
BASE DE DATOS II
15
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
16
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
17
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
18
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Nota: El SQL no distingue las mayúsculas de minúsculas así que para este programa es
lo mismo “hola” que “HOLA”
1. Botón inicio
19
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
20
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
5. Ingresando
Cuando ingresas por Autenticación de Windows se refiere al usuario que tiene por
BASE DE DATOS II
21
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
En ella veras las base datos que se instalan con el SQL Server y la base datos que
vas creando.
Nosotros trabajaremos con la base datos Northwind
Para crear una nueva consulta, primero debes seleccionar la base datos que vas a
trabajar en este caso es Northwind, luego haces clic derecho y nueva consulta; o
después de seleccionar la base datos haces clic en el icono nueva consulta.
BASE DE DATOS II
22
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
2. Ejecutar consulta
BASE DE DATOS II
23
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
3. SELECT
4. FROM
Ejemplos:
5. WHERE
Esta sentencia filtra registros que cumplan la condición dada, verdadera o falsa.
BASE DE DATOS II
Si quisiera unir más condiciones utilizare los operadores lógicos AND u OR, esto
será de acuerdo a la información de lo que se desea obtener.
24
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplos:
a) Una condición
select * from Products
where CategoryID = 2
Debe tener dos condiciones, que uno sea mayor igual (>=) y el otro menos
igual (<=)
Tiene que estar unidas con AND
Que el campo sea el mismo
Ejemplo 1:
Ejemplo 2:
25
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplos 1:
Ejemplo 2:
Ejemplo 3:
Ejemplo 4:
6. ORDERDATE:
Ejemplo 1:
select *
from dbo.Orders
WHERE YEAR (OrderDate)='1996'
7. DATEPART
Ejemplo 1:
select *
from Orders
26
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
DATEPART (DD,OrderDate)='31'
8. ORDER BY
Forma ascendente
Ejemplo 1:
Ejemplo 2:
Forma descendente
Ejemplo 1:
Ejemplo 2:
BASE DE DATOS II
27
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 1:
9. LIKE
Si queremos buscar por una palabra, letra o frase; entra a tallar un comodín que es
el signo de porcentaje (%)
10. TOP
BASE DE DATOS II
28
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 1:
select top 3*
from Products
BASE DE DATOS II
29
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejercicios
Para hacer comentarios en el SQL SERVER es con dos guiones (--) para una línea, si
queremos comentar más de una línea utilizaremos (/* comentario */) para abrir y
cerrar el comentario. Usando la Base Datos Northwind, realizar las siguientes
consultas:
==================================
==================================
==================================
Ejercicio 1: Seleccionar todos los campos de la tabla clientes, ordenado por nombre del
contacto de la compañía, alfabéticamente.
Ejercicio 2: Seleccionar todos los campos de la tabla órdenes, ordenados por fecha de
la orden, descendentemente.
Ejercicio 3: Seleccionar todos los campos de la tabla detalle de la orden, ordenada por
cantidad pedida, ascendentemente.
Ejercicio 4: Obtener todos los productos, cuyo nombre comienzan con la letra P y
tienen un precio unitario comprendido entre 10 y 120.
30
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejercicio 5: Obtener todos los clientes de los países de: USA, Francia y UK.
Ejercicio 6: Obtener todos los productos descontinuados y sin stock, que pertenecen a
las categorías 1, 3, 4 y 7.
Ejercicio 7: Obtener todas las ordenes hechas por el empleado con código: 2, 5 y 7 en
el año 1996
--otra forma
Ejercicio 9: Seleccionar todos los clientes que no cuenten con FAX, del país de USA
(Country='USA')
Ejercicio 10: Seleccionar todos los empleados que cuentan con un jefe.
31
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejercicio 11: Seleccionar todos los campos del cliente, cuya compañía empiece con la
letra de A hasta la D y pertenezcan al país de USA, ordenarlos por la dirección.
Ejercicio 12: Seleccionar todos los campos del proveedor, cuya compañía no comience
con las letras de la B a la G, y pertenezca al país de UK, ordenarlos por nombre de la
compañía.
Ejercicio 13: Seleccionar los productos vigentes cuyos precios unitarios están entre 35
y 250, sin stock en almacén. Pertenecientes a las categorías 1, 3, 4, 7 y 8, que son
distribuidos por los proveedores 2, 4, 6, 7 y 9.
Ejercicio 14: Seleccionar todos los campos de los productos descontinuados, que
pertenezcan a los proveedores con códigos: 1, 3, 7, 8 y 9, que tengan stock en
almacén, y al mismo tiempo que sus precios unitarios estén entre 39 y 190, ordenados
por código de proveedor y precio unitario de manera ascendente.
Ejercicio 15: Seleccionar los 7 productos con precios más caros, que cuenten con stock
en almacén.
32
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejercicio 16: Seleccionar los 9 productos, con menos stock en almacén, que
pertenezcan a la categoría 3, 5 y 8.
SELECT TOP 9
*FROM Products
where CategoryID in (3,5,8)
ORDER BY UnitsInStock
Ejercicio 17: Seleccionar las órdenes de compra, realizadas por el empleado con código
entre el 2 y el 5, además de los clientes con códigos que comienzan con las letras de la
A hasta la G, del 31 de Julio de cualquier año.
Ejercicio 18: Seleccionar las órdenes de compra, realizadas por el empleado con código
3, de cualquier año pero solo de los últimos 5 meses (agosto - Diciembre).
Ejercicio 19: Seleccionar los detalles de las órdenes de compra, que tengan un monto
de cantidad pedida entre 10 y 250.
11. INSERT
33
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 1: Se creó la tabla alumno, con los siguientes campos: código, nombre,
apellido.
SELECT *
FROM ALUMNO
Ejemplo 2: Crear una tabla artículos, créala con identidad (es decir el código se
genera solo a partir de una determinada cantidad y no acepta valores nulos):
SELECT *
FROM ARTICULOS
12. UPDATE
Ejemplo 1:
34
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
update Products
set UnitsInStock=50
where ProductID=1
update Customers
set Country='Peru'
where Country='UK'
update Suppliers
set Country='Peru'
where Country='UK'
update Categories
set CategoryName='juguetes'
where CategoryId=5
Ejemplo 4: Cambiar y colocar el número de fax 'o' a los que son nulos
update Suppliers
set fax='0'
where Fax is null
update Employees
set LastName='Vasquez',FirstName='Alex'
where EmployeeID=6
35
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
update Customers
set CustomerID='UNCFI'
where CustomerID='ALFKI'
13. DELETE
Esta sentencia sirve para eliminar los campos de una tabla específica.
Ejemplo 1:
delete
from Customers
delete
from [Order Details]
where OrderID=10255
delete
from Orders
where OrderID=10255
delete
from [Order Details]
where ProductID in (5,9,17,24,28,29,42,53)
delete
from Products
BASE DE DATOS II
where Discontinued=1
Otra forma:
delete
36
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
delete
from Products
where Discontinued=1
14. DISTINCT
Sirve para que no se repitan los campos, es decir, omite los registros cuyos campos
seleccionados coincidan totalmente
Sintaxis:
Select * from nombre_tabla_1
Inner join nombre_tabla_2
On campo.nombre_tabla_1=campo.nombre_tabla_2
Pero para la combinación de tablas se puede hacer de dos formas una es con alias
y otra sin ella.
37
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
38
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
from Suppliers as s
inner join Products as p on s.SupplierID = p.SupplierID
Ejercicio 9: Modificar el ejercicio 3 solo las órdenes del mes de enero de 1997
39
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejercicio 10: Modificar el ejercicio 4 solo las productos con stock cero
Ejercicio 12: Modificar el ejercicio 6 solo del primer trimestre del año 1996
16. UNION
Esta sentencia sirve para unir varias consultas, pero para esto debe cumplir:
BASE DE DATOS II
Ejemplo:
40
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Esta sentencia nos permite crear una nueva tabla a partir de un conjunto de
resultados.
Ejemplo:
18. SUBCONSULTAS
Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia
SELECT, que llamaremos consulta principal.
Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal
exceptuando que aparece encerrada entre paréntesis, no puede contener la
cláusula ORDER BY, ni puede ser la UNION de varias sentencias SELECT, además
tiene algunas restricciones en cuando a número de columnas según lugar donde
aparece en la consulta principal. Se aconseja no utilizar campos calculados en las
subconsultas.
Ejemplo 2: Mostrar los productos cuyo precio es mayor al promedio de todos los
productos
BASE DE DATOS II
19. GROUP BY
41
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Esta sentencia agrupa todos los registros iguales en uno solo y los únicos campos
que existen son los que sobreviven y van en el SELECT; también pueden sumar,
sacar promedio, desviación estándar, mínimo, máximo.
Ejemplos:
42
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejercicios
43
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejercicio 7: Calcular el stock total de los productos por cada categoría. Mostrar el
nombre de la categoría y el stock por categoría.
Ejercicio 8: Calcular el stock total de los productos por cada categoría. Mostrar el
nombre de la categoría y el stock por categoría. Solamente las categorías 2, 5 y 8.
Ejercicio 9: Obtener el nombre del cliente, nombre del proveedor, nombre del
empleado y el nombre de los productos que están en la orden 10250.
Ejercicio 10: Mostrar el número de órdenes realizadas de cada uno de los clientes por
año.
Ejercicio 11: Mostrar el número de órdenes realizadas de cada uno de los empleados
en cada año.
44
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejercicio 12: Mostrar el número de órdenes realizadas de cada uno de los clientes por
cada mes y año.
Ejercicio 13: Contar el número de órdenes que se han realizado por años y meses.
BASE DE DATOS II
45
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
PROCEDIMIENTOS ALMACENADOS
Para crear un procedimiento iniciara con CREATE luego ira PROC o PROCEDUTE y al
final darle el nombre del procedimiento.
Sintaxis:
create proc hol
Si se desea modifica se reemplazara CREATE por ALTER, este último nos permitirá
guardar las modificación en cuerpo del procedimiento.
Sintaxis:
alter proc hol
Parámetros: es una variable que establece el ámbito de los datos específicos devueltos
cuando se ejecuta un informe. Puede proporcionar un valor predeterminado, o la
persona que ejecuta el informe puede seleccionar un valor o un conjunto de valores.
Para agregar un parámetro al informe.
Primero va el signo arroba (@), luego el nombre del parámetro y luego el tipo.
Sintaxis:
@hola int
AS: La cláusula AS se puede usar para cambiar el nombre de una columna de conjunto
de resultados o para asignar un nombre a una columna derivada.
Cuando se define una columna del conjunto de resultados mediante una referencia a
la columna de una tabla o vista, el nombre de la columna del conjunto de resultados es
el mismo que el nombre de la columna a la que se hace referencia. La cláusula AS se
puede usar para asignar un nombre distinto, o alias, a la columna del conjunto de
resultados. Esto se puede hacer para mejorar la comprensión.
as
Después si se desea se declara o no variables. Para declarar una variable se tiene que
anteponer DECLARE, el signo arroba (@), nombre de la variable y el tipo.
Ejemplo 1:
create proc hol
@hola int
as
46
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 3: Crear una tabla CLIENTES con los siguientes campos: código (7), nombre
BASE DE DATOS II
(30), apellidos (30), dirección (30) y correo (30). Crear un SP que inserte a los clientes, y
el código se generará con las dos primeras letras de su nombre y apellido, y un número
correlativo.
47
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Select @nr=count(*)+1
From clientes
If @nr <=9
Set @cod =rtrim(@cod)+'00'+ltrim(str(@nr))
If @nr <=99
Set @cod =rtrim(@cod)+'0'+ltrim(str(@nr))
Else
Set @cod =rtrim(@cod)+ltrim(str(@nr))
Insert into clientes(codigo,nombre,apellidos,direccion,correo)
Values (@cod,@n,@a,@d,@c)
@ape varchar(50),
@dir varchar(50),
@core varchar(50)
as
declare @nr as int,
48
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
@cod as char(7)
set @cod=LEFT(@nom,2)+LEFT(@ape,2)
select @nr=COUNT(*)+1
from persona
where substring(codigo,1,4)=@cod
if @nr<=9
set @cod=rtrim(@cod)+'00'+LTRIM(STR(@nr))
if @nr<=99
set @cod=rtrim(@cod)+'0'+LTRIM(STR(@nr))
if @nr<=999
set @cod=rtrim(@cod)+LTRIM(STR(@nr))
execute prod_prov 5
exec prod_prov 5
49
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Llamamos:
select OrderID from [Order Details]
where OrderID=10570
union select OrderID from Orders
where OrderID=10570
Observación: Tiene que seguir el orden de los parámetros, caso contrario saldrá un
error.
50
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 7: Crear un SP cuantos productos ha sido vendido por los empleados en el año
1996
51
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
52
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 11: Mostrar las cantidades de ordenes en un determinado año menor a los
días transcurridos.
Ejemplo 12: Generar un SP que genere un numero al azar y al comparar con los
empleados, y muestre al ganador.
53
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
SELECT LastName
FROM Employees
WHERE EmployeeID = @AZAR
Ejemplo 14: Crear un SP que actualice los precios de los productos, solo de los
productos de la categoría ingresada (ingresar el porcentaje de aumento de los precios)
solamente se actualizan los productos vigentes.
Despues de ejecutar el SP
54
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 16: Crear una tabla con los siguientes campos: código (7), nombre, apellidos,
género. El código se generara con los dos primeros caracteres del nombre, con los dos
primeros caracteres del apellido; y el resto será completado por un contador, según el
género.
Muestra:
CÓDIGO NOMBRE APELLIDO GENERO
JUEPE001 JUAN PÉREZ M
VIRA002 VÍCTOR RAMÍREZ M
BASE DE DATOS II
55
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
@ape varchar(30),
@SX CHAR(1)
as
declare @nr int,
@cod char(7)
select @nr=COUNT(*)+1
from PERSONA
WHERE genero=@SX
if @nr<=9
set @cod=LEFT(@nom,2)+left(@ape,2)+'00'+LTRIM(STR(@nr))
else if @nr<=99
set @cod=LEFT(@nom,2)+left(@ape,2)+'0'+LTRIM(STR(@nr))
else
set @cod=LEFT(@nom,2)+left(@ape,2)+LTRIM(STR(@nr))
Ejemplo 17: Crear una tabla con los siguientes campos: código (9), nombre, apellidos,
fecha nacimiento. El código se generara con el primer carácter del nombre, del
apellido, el año de nacimiento; y el resto será completado por un contador.
select @nr=COUNT(*)+1
from alum
if @nr<=9
set @cod=LEFT(@nom,1)+left(@ape,1)+LTRIM(str(YEAR(@fn)))+'00'+LTRIM(STR(@nr))
else if @nr<=99
set @cod=LEFT(@nom,1)+left(@ape,1)+LTRIM(str(YEAR(@fn)))+'0'+LTRIM(STR(@nr))
else
set @cod=LEFT(@nom,1)+left(@ape,1)+LTRIM(str(YEAR(@fn)))+LTRIM(STR(@nr))
56
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 18: Crear un Stored Procedure que muestre los productos de la misma
categoría que tiene el producto más caro (ir modificando el producto más caro para
realizar las pruebas)
--Pruebas
Update Products
Set UnitPrice=9642
Where ProductName='Tofu'
Update Products
Set UnitPrice=10000
Where ProductName='Geitost
Ejemplo 19: Crear un Stored Procedure que muestre el número de la orden, el año de
la orden, el total de productos comprados en esa orden, el monto total pagado por la
orden. Solo mostrar las ordenes según el año ingresado al Sored Procedure.
Createproc gane
as
select top 10 CustomerID as codigo, CompanyName as compañia, ContactName as contacto,Address
as direccion, City as ciudad, Country as pais
into ganador
57
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
from Customers
orderby NEWID()
select *from ganador
drop table ganador
Ejemplo 21: Crear un procedimiento almacenado que copie los registros de productos
a la tabla ProductosNuevos (código, nombre, precio, stock) colocando el stock a cero a
todos los productos y el precio actualizarlo según:
Menor o igual a 10 --> 200%
Mayor que 10 y menor o igual a 23 --> 100%
Mayor a 23 y menor o igual a 110 --> 80%
Mayor a 110 --> 70%
Alterproc nuevo
as
select ProductID as codigo,
ProductName as nombre,
UnitPrice as precio,
UnitsInStock as stock
Into productonuevo
From Products
Update productonuevo
Set stock=0
Update productonuevo
Set precio=precio+precio*0.7
Where precio>110
Update productonuevo
Set precio=precio+precio*0.8
Where precio>23 and precio<=110
Update productonuevo
Set precio=precio+precio
Where precio>10 and precio<=23
Update productonuevo
Set precio=precio+precio*2
Where precio<=10
-- Pruebas
Select ProductID,ProductName,UnitPrice,UnitsInStock
BASE DE DATOS II
From Products
Update Products
Set UnitPrice=20
Where ProductName='Chang'
58
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 22: Crear una tabla personas, con los campos: DNI, nombres, apellidos, sexo.
Ingresar por lo menos 10 registros.
Implementar un Stored Procedure que permita seleccionar una pareja de personas,
conformada por una mujer y un hombre de manera aleatoria.
Ejemplo 23: Crear un Stored Procedure que nos permita insertar un registro a la tabla
postulantes (código, nombres, apellidos, fecha de nacimiento, sexo), internamente se
debe autogenerar el código para posteriormente ingresar el registro completo, el
código se genera de la siguiente forma:
59
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
REPORTING SERVICES
Para crear un reporte vamos utilizar una herramienta del SQL Server que es el Visual
Studio 2008.
60
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
61
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
62
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
63
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Donde está la opción Nombre del servidor buscara el servidor que esté
trabajando, en nuestro caso estamos con Autentificación de Windows y allí
vamos a colocar el punto (.)
64
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Aceptar
65
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
5.6. Luego en la parte izquierda Datos de Informe hacemos clic Nuevo > Origen
de Datos
BASE DE DATOS II
66
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
Aceptar
67
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
68
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
69
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
70
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
71
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
72
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Cuando estamos en la pestaña vista previa, aparece una caja por el cual vamos a
filtrar, este es el parámetro creado en procedimiento. En este caso es por CategoryID.
73
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
74
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 2:
BASE DE DATOS II
75
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 3:
76
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 4: Crear un reporte usando reporting services, que muestre el nombre del
producto, nombre de la empresa proveedor, precio seleccionar el nombre de la
empresa y mostrar los productos del proveedor seleccionado
77
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
78
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
La primera opción Ninguno, sale la opción dela caja, donde tenemos que escribir
el valor
La segunda opción Especificar valores, es cuando conocemos los valores, vamos
agregando uno a uno. Lo cual no es tan recomendable si son varias.
La tercera opción Obtener valores de una consulta, esta es cuando usamos una
BASE DE DATOS II
consulta, esta puede ser creada como procedimiento en el SQL o también directo.
Lo que vimos al inicio cuando hacíamos la consulta.
79
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
O también
BASE DE DATOS II
80
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Luego vamos a Propiedades del parámetro, dándole doble clic, elegimos Valores
disponibles y checkamos la tercera opción.
81
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
82
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 5: Mostrar el número de productos vendidos en cada mes por cada empleado
Creamos el procedimiento
83
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 6: Mostrar el nombre del cliente, nombre del empleado, filtrar por el
BASE DE DATOS II
Creamos el procedimiento
84
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
@EMP INT
AS
SELECT CompanyName,(LastName+' '+FirstName)as nombre
FROM Customers as c
inner join Orders as o
on o.CustomerID=c.CustomerID
inner join Employees as e
on e.EmployeeID=o.EmployeeID
where e.EmployeeID=@EMP
BASE DE DATOS II
85
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Creando el procedimiento
86
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Creando el procedimiento
87
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
Ejemplo 9: Mostrar: nombre del producto, unitprice, category name nombre del
proveedor del producto entre dos precios.
88
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Creando el procedimiento
BASE DE DATOS II
89
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 10: Mostrar: productname stock del producto, categoryname, company name
del proveedor. Filtrar por proveedor y nombre de la categoría.
Creando el procedimiento
90
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
from Suppliers
BASE DE DATOS II
91
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Creando el procedimiento
BASE DE DATOS II
92
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Creamos el procedimiento.
93
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
94
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 13: Parámetros mes, tener en cuenta el nombre de los empleados, numero
de ordenes realizadas, mostrar en un gráfico.
95
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
96
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 14: Parámetro empleado, ver el año y el monto total vendido por el empleado
mostrar en un gráfico.
97
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
98
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 15: Vamos a crear un grupo en el Visual 2008, para la cual vamos utilizar la
siguiente consulta:
Directamente
BASE DE DATOS II
99
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
100
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Se abre una ventana en el cual vamos agrupar en nuestro caso por categoryname. A la
vez checamos las dos casillas: “Agregar encabezado de grupo”, “Agregar pie de
grupo”
BASE DE DATOS II
101
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Aceptamos
Vemos que han aparecido dos filas más, una encima y otra debajo eso es debido a las
casillas checkadas, mencionadas anteriormente. En la fila de encima puedes tomarla
como para un título por el estilo dependerá de tu trabajo; mientras que la fila que está
debajo podrías utilizarlo para una operación, repito todo será cuestión de tu trabajo.
Nosotros vamos a utilizar para la suma total del precio.
BASE DE DATOS II
102
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Al hacer clic en esta Visibilidad de fila. Se habre una ventana en la cual vamos checkar
la opción de ocultar y en la casilla La visualización se puede activar o desactivar
vamos a buscar el nombre del grupo por el cual se quiere ocultar.
103
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
Al lado de cada grupo ha aparecido el signo más (+), esto quiere decir que están
ocultos ciertos datos y para verlos solo hay que darle clic.
104
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Pero si nos damos cuenta no se han ocultado las dos filas creadas anteriormente como
encabezado y pie de grupo. Pero haciendo el mismo procedimiento podemos
ocultarlo.
BASE DE DATOS II
105
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Aparece la misma ventana en el cual vamos a ocultar y elegir el grupo por el cual se
quiere ocultar.
106
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
Ejemplo 16: Vamos a generar un informe integrado, pero para esto no debe tener
ningún parámetro.
107
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
En este caso vamos utilizar la consulta del ejemplo anterior (ejemplo 16) y esta
consulta.
Hacemos los mismos pasos para crear el informe, nos detenemos cuando queremos
jalar una herramienta del cuadro de herramientas. Porque allí vamos elegir la
herramienta informe integrado.
Es decir los dos reportes tienen que existir por si solas ya que la herramienta solo las
va juntar. Eso lo vemos en el explorador de soluciones.
108
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
109
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
110
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
111
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
La consulta es:
select ProductName,UnitPrice,CategoryID
from Products
BASE DE DATOS II
112
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
=iif(Fields!CategoryID.Value=1,10%,
iif(Fields!CategoryID.Value=2,15%,
iif(Fields!CategoryID.Value=3,23%,
iif(Fields!CategoryID.Value=4,30%,0%))))
BASE DE DATOS II
113
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
114
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
115
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
=iif(Fields!CategoryID.Value=1,Fields!UnitPrice.Value*0.10,
iif(Fields!CategoryID.Value=2,Fields!UnitPrice.Value*0.15,
iif(Fields!CategoryID.Value=3,Fields!UnitPrice.Value*0.23,
iif(Fields!CategoryID.Value=4,Fields!UnitPrice.Value*0.30,
Fields!UnitPrice.Value*0))))
116
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
117
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
=iif(Fields!CategoryID.Value=1,"Yellow",
iif(Fields!CategoryID.Value=2,"Yellow",
iif(Fields!CategoryID.Value=3,"Green",
iif(Fields!CategoryID.Value=4,"Green",
iif(Fields!CategoryID.Value=5,"Blue",
iif(Fields!CategoryID.Value=6,"Blue","Red"))))))
BASE DE DATOS II
118
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Y se ve así:
BASE DE DATOS II
119
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Condición.
=iif(Fields!Discontinued.Value=False,"Discontinuado","Vigene")
BASE DE DATOS II
120
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Sale:
BASE DE DATOS II
121
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 20: Mostrar el código y nombre de los empleados, luego enlazar los informes
de tal manera que al dar click en el nombre del empleado, se abra otro informe en el
cual se pueda visualizar una gráfica con las ventas del empleado por año, mostrándose
el nombre del empleado.
122
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ahora bien queremos que cuando hagamos clic en empleado nos lleve a una segunda
consulta, pero antes debemos crearla. Usamos la segunda consulta.
BASE DE DATOS II
123
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Seleccionamos la celda donde dice [Empleado], le damos clic derecho y hacemos clic
en Propiedades de cuadro de texto, luego vamos a Acciones y elegimos la opción Ir a
informe.
BASE DE DATOS II
124
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
125
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
126
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
RESTRICCIONES EN SQL
En nuestro caso vamos a crear una nueva tabla llamada pruebas_restricciones, con los
siguientes campos:
127
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
restricción.
128
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Vamos a restringir al sueldo que sea mayor a 650, si cumple se podrá ingresar el
dato caso contrario no.
Nombre de la restricción: CK_sueldo
Nos vamos a la opción expresión y condicionamos.
BASE DE DATOS II
129
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Acepamos todos los cambios guardamos los cambios, para que haga efecto en la
tabla. Y luego insertamos algunos datos.
BASE DE DATOS II
130
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
131
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
132
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
133
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Nos genera un error por lo que está restringido el campo seso. Y en cambio sí
colocamos según la restricción, si nos acepta.
134
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
135
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
136
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
137
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Vamos a restringir al campo celular para que tenga los 11 caracteres, aunque los
puedo llenar de espacios en blanco el cual no se le permitirá.
138
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
No nos permite porque hay espacios en blando en el campo celular y solo hay 7
caracteres. Lo cual no es permitido.
BASE DE DATOS II
139
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
d
FUNCIONES
(1) UPPER
Convierte a mayúsculas
select UPPER(CompanyName)
from Suppliers
(2) LOWER
Convierte a minúsculas
BASE DE DATOS II
140
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
(3) LTRIM
Borra los espacios de la izquierda
(4) RTRIM
Borra los espacios de la derecha
141
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
(5) LEN
Cuenta la cantidad de caracteres
(6) SUBSTRING
Substrae un subcadena de una cadena a partir de una posición,
(7) CHARINDEX
Muestra la primera posición donde se encuentra ubicado el carácter dentro
BASE DE DATOS II
CHARINDEX (lo que busca, cadena donde buscar, desde que posición)
142
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
(8) GETDATE
Muestra la fecha actual del sistema
select GETDATE()
(9) DATEADD
Añade o disminuye cierta cantidad al año (yy), mes (mm), día (dd)
select DATEADD(YY,1,GETDATE())
select DATEADD(YY,1,GETDATE())
BASE DE DATOS II
143
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
(10) DATEPART
Saca parte de la fecha ya sea el día, mes, año.
select DATEPART(YY,GETDATE())
select DATEPART(MM,GETDATE())
select DATEPART(MM,DATEADD(mm,-3,getdate()))
(11) DATEDIFF
Devuelve la diferencia entre dos fechas como días, meses, años.
144
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
(12) DATENAME
Devuelve el nombre de un mes, día.
(13) ISDATE
Devuelve uno (1) cuando se trata de una fecha y cero (0) cuando no lo es.
select ISDATE('hhhh')
select ISDATE('10/10/1998')
BASE DE DATOS II
145
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
(14) ISNUMERIC
Devuelve uno (1) cuando se trata de un número y cero (0) cuando no lo es.
(15) @@ROWCOUNT
Devuelve la cantidad de campos afectados con la última acción. Es decir
guarda temporalmente hasta que se ejecute una siguiente instrucción.
Vamos actualizar el stock de los productos de la categoría 1
update Products
set UnitsInStock=200
where CategoryID=1
BASE DE DATOS II
select @@ROWCOUNT
146
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Resulta
Ahora si ejecutamos
select @@ROWCOUNT
Obtenemos.
147
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
as
begin
declare @igv money
set @igv=@monto * 0.19
return @igv
148
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
end
--probamos la funcion
select UnitPrice, dbo.fn_igv(UnitPrice)as IGV
from Products
Ejemplo 2: Crear una función el cual borre los espacios tanto de la derecha
como de la izquierda.
--probamos la funcion
select dbo.fn_espacios(' Alex ')as cadena
BASE DE DATOS II
149
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 4: Crear una función que verifique dentro de una tabla si los usuarios
son correctos o no. De tal modo que me devuelva uno (1) cuando sea correcto
y cero (0) se no lo es.
returns int
begin
declare @nr int
select @nr=count(*)
from usuarios
150
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
return @nr
end
---probamos
select dbo.fn_usuarios('david','alex')
select dbo.fn_usuarios('alex','alex')
if @@ROWCOUNT=1
BASE DE DATOS II
151
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
---probamos
exec usuarios_cambi_clave 'alex','david','123'
exec usuarios_cambi_clave 'alex','alex','123'
Seguidamente la función
152
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
-- FUNCION
select @reg=companyname
from suppliers
where supplierid=cast((@rnd*@nreg+1) as int)
return @reg
end
Y probamos
select dbo.fn_aleatorio()
Ejemplo 1: Crear una función que ingrese “C” (corto) si se desea visualizar solo
el ID y apellido del Empleado, y “L” (Largo) si se desea visualizar id, nombre y
apellido del Empleado.
153
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
(@tipo char(1))
--es la tabla temporal
RETURNS @fn_empleados TABLE
--son los campos de la tabla temporal @fn_empleados
(ID int PRIMARY KEY NOT NULL,
nombre nvarchar(61) NOT NULL)
AS
BEGIN
--convierte a mayuscula
-- condiciona
IF upper(@tipo) = 'C'
--se inserta datos en la tabla temporal
INSERT @fn_Empleados
--utiliza la tabla empleados, es decir
--pasa datos a la tabla temporal
SELECT EmployeeID, LastName
FROM Employees
ELSE IF upper(@tipo) = 'L'
INSERT @fn_Empleados
--utiliza la tabla empleados, es decir
--pasa datos a la tabla temporal
SELECT EmployeeID,
(FirstName + ' ' + LastName) as Nombre
FROM Employees
RETURN
END
154
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 2: Crear una función que nos permita seleccionar aleatoriamente “N”
registro de la tabla Products.
Luego la función
begin
set @i=@i+1
INSERT @prod
SELECT productid,productname
from products
155
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
where productid=@reg_azar
end
end
RETURN
END
Probamos
Ejemplo 1: Crear una función que me muestre el ID, cliente. Filtradas por la
región.
Probamos.
156
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
TRIGGERS
Creamos el trigger
Probamos
Nos muestra
157
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
select *
from [Order Details]
where OrderID = 10529
El trigger nos condiciona que debemos borrar uno por uno, y no en conjunto.
Creamos el trigger
select productid,productname,unitprice,unitsinstock
from products
where productid=11
values (10260,11,14,5,0)
158
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
select productid,productname,unitprice,unitsinstock
from products
where productid=11
Creamos el trigger
select ProductID,ProductName,Discontinued
from products
WHERE PRODUCTID = 11
BASE DE DATOS II
159
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
select ProductID,ProductName,Discontinued
from products
WHERE PRODUCTID = 11
Creamos el trigger
Probamos
UPDATE SUPPLIERS
SET COMPANYNAME ='JUAN'
BASE DE DATOS II
WHERE SUPPLIERID = 2
160
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejemplo 5: Crear una tabla histórico que vaya guardando el nombre de la compañía
(actual nombre y nuevo nombre) de los proveedores. Tabla: histórico (id, actual,
nuevo) el id es identity.
Creamos el triggers
Probamos
UPDATE SUPPLIERS
SET COMPANYNAME ='JUAN'
WHERE SUPPLIERID = 2
BASE DE DATOS II
161
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Verificamos
SELECT *
FROM HISTORICO
BASE DE DATOS II
162
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Ejercicios
1. Crear una función que permita cambiar el primer carácter de cada nombre y
apellido ingresado a mayúsculas y el resto en minúsculas.
Ejemplo:
Ingresa: JUAN PABLO DÍAZ TORRES
Sale: Juan Pablo Díaz Torres
SOLUCIÓN
set @i=len(@texto)
set @tx=substring(@texto,1,1)
set @frase=upper(@tx)
set @c=2
while @c<=@i
begin
set @tx=substring(@texto,@c,1)
if @tx=' '
begin
set @frase=@frase+' '+upper(substring(@texto,@c+1,1))
set @c=@c+2
end
else
begin
set @frase=@frase+LOWER(@tx)
set @c=@c+1
end
end
BASE DE DATOS II
return @frase
end
--PROBAMOS
163
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
SOLUCIÓN
2º Creamos el Reporting
BASE DE DATOS II
164
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
165
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
166
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
167
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
168
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
Del mismo modo para el año, esto para no generar que se muestre doble vez esas
BASE DE DATOS II
dos columnas.
169
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
170
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
BASE DE DATOS II
171
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
3. Crear un Trigger que cada vez que cambie un precio del producto, el antiguo
precio (el que se va a reemplazar, el precio anterior al cambio es el quese va a
guardar). Se almacene en una tabla “histórico precio”.
TABLA: Historico_Precio
ID: Int Identi Primary Key
FECHA_CAMBIO
COD_PRODUCT
PRECIO
Update product
Set unitprice=100
Where productid=5
HISTORICO_PRECIO
ID FECHA_CAMBIO COD_PRODUCT PRECIO
1 20/07/11 5 80
BASE DE DATOS II
SOLUCIÓN
172
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
2º Creamos el Triggers
173
MANUAL SQL SERVER 2008
INGENIERÍA DE SISTEMAS
ALEX DAVID VÁSQUEZ SAMÁN
INSERT INTO
HISTORICO_PRECIO(FECHA_CAMBIO,COD_PRODUCT,PRECIO)
VALUES (@FECHA,@PROD,@PRE_ACT)
END
-- PROBAMOS
DELETE HISTORICO_PRECIO
-- 1º ACTUALIZAMOS
Update products
Set unitprice=258
Where productid=2
-- 2º MOSTRAMOS LA TABLA
SELECT *
FROM HISTORICO_PRECIO
-- 3º VERIFICAMOS
SELECT ProductID,UNITPRICE
FROM PRODUCTS
Where productid=2
BASE DE DATOS II
174
UNIVERSIDAD NACIONAL DE CAJAMARCA
VÁSQUEZ SAMÁN, ALEX DAVID
1
2 011
Universidad Nacional de
Cajamarca
Google APPS
Alumno
INGENIERÍA DE SISTEMAS
UNIVERSIDAD NACIONAL DE CAJAMARCA
UNIVERSIDAD NACIONAL DE CAJAMARCA
VÁSQUEZ SAMÁN, ALEX DAVID
2
SQL Server permite la creación de inicios de sesión de usuario. Cada persona que
necesita tener acceso a SQL Server se puede administrar su propia cuenta de
usuario.
a) Autenticación de Windows.
4. Haga clic en Funciones del servidor ficha si es necesario aplicar los privilegios
de seguridad a nivel de servidor.
5. Haga clic en la Asignación de usuarios ficha para especificar qué bases de datos
de esta cuenta de usuario se le permite el acceso. De forma predeterminada, la
entrada será asignado a la “pública” papel, que prevé el inicio de sesión con
acceso básico. Si el inicio de sesión necesita más el acceso en una o más bases
de datos, puede ser asignado a otra función con mayores privilegios.
Tenga en cuenta que estas funciones son la base de datos Funciones y son
diferentes a las funciones de servidor en la ficha anterior. Las funciones de
servidor son para la administración de SQL Server. Funciones de base de datos
se crean dentro de cada base de datos y especificar lo que la entrada se puede
hacer dentro de esa base de datos.
6. En la opción Elementos que puede proteger podrá elegir los elementos que
desea proteger
2. ROLES Y PRIVILEGIOS(PERMISOS)
Los roles son agrupaciones de usuarios en SQL Server donde se puede asignar
permisos (y negar permisos también).
SQL server tiene un grupo de roles que son creados en el momento de la instalación
que corresponden a funciones comunes de administradores.
Los roles de SQL Server cumplen la misma función que un rol de Windows, esto es,
agrupar usuarios que comparten los mismos permisos. Dichos permisos son otorgados
al rol y los usuarios heredan los permisos de los roles.
Roles de Servidor
Cada base de datos tiene un conjunto definido de roles de base de datos, al cual los
usuarios de base de datos pueden ser adicionados. Estos roles de base de datos son
únicos dentro de la base de datos. Mientras los permisos de los roles de base de datos
no pueden ser alterados, nuevos roles de base de datos pueden ser creados.
Nota:
Roles
sp_addrolemember hola,davidd
Ejemplo:
Ejemplo:
Ejercicio (*).
Contraseña: 987
Lo común seria:
6. Vamos hacer una primera prueba vamos acceder con el nuevo usuario. Nos
desconectamos y volvemos a conectarnos pero con Autentificación de SQL Server,
en las casillas digitamos el inicio de sesión y la contraseña.
Clic en buscar, checamos la opción Todos los objetos de los tipos y acepamos
Al aceptar aparecerán todas las tablas en el cual podrá restringir o no, lo que Ud.
prefiera:
La consulta:
select *
from Products
El mensaje:
Consulta 1:
select CustomerID
from Customers
Consulta 2:
select *
from Customers
El mensaje:
Mens. 229, Nivel 14, Estado 5, Línea 1
Se denegó el permiso SELECT en el objeto 'Customers', base de datos
'Northwind', esquema 'dbo'.
Inicio > Panel de Control > Cuentas de Usuario… > Agregar o quitar cuentas de
usuario > Crear una nueva cuenta
Se le da un nombre cualesquiera
Ahora no aparece ninguna tabla porque aún falta dar los permisos eso se hace del
mismo modo que para la AUTENTICACIÓN DE SQL SERVER.
En mi caso la cuenta recién creada es alex. Le doy clic y me lleva a una ventana,
donde me muestra.
Se podría dar límites de tiempo, es decir que solo tenga acceso por horas, días.
4. Google Apps
La integración con Google Apps implicará que los mails no serán administrados por
nosotros sino por Google, por lo que resulta fundamental decidir si desean utilizar
el servicio.
Fallas
¿Por qué?
Todos tienen una cuenta Google, tu negocio, tus empleados, así que es
indispensable que todos tengan identificadas perfectamente la dirección web
correcta y los inicios de sesión correspondientes para evitar el desastre.
Google usa la misma interfaz de e-mail para Gmail y para hospedar las cuentas de
Google Apps. Así que es fácil confundirse si no estás atento.
"Los usuarios tienen que sentirse cómodos usando aplicaciones basadas en la Web.
Eso no vale sólo para Google, sino para todo tipo de buscadores. Cuando se usa la
cloud computing se necesita cambiar ciertas cosas de la conducta laboral, pero las
ventajas son enormes" apunta Matt Glotzbach, director de productos en Google
Apps.
Estoy iniciando en esto así que les pido disculpas por algunos errores que se
presenten en este manual.