You are on page 1of 80

Creando un database SQL

-- nueva version --
create database ventasx on primary
(
name = ventasx_data,
filename='c:\ventas1\ventasxprimary.mdf',
size=5MB,
maxsize=10MB,
filegrowth=1MB
)
log on
(
name = ventasx_log,
filename='c:\ventas1\ventasxlog.ldf',
size=5MB,
maxsize=10MB,
filegrowth=1MB
)

drop database ventas


-- esto es para borrar

-- crear tabla --

use ventas
create table producto(
id int not null,
nombreproducto nvarchar(40),
descripcion nvarchar(200))

drop table product

create database Ventas1


ON
primary
(name = ventas1primary,
filename = 'C:\\Ventasdata\ventas1primary.mdf' ,
size = 50MB,
Maxsize = 200,
filegrowth = 20),
filegroup ventas1FG
(name = ventas1Data1,
filename = 'C:\\Ventasdata\ventas1Data.ndf' ,
size = 200MB,
Maxsize = 800,
filegrowth = 100),
Log on
(name = ventas1log,
filename = 'C:\\Ventasdata\ventas1log.ldf' ,
size = 300MB,
Maxsize = 800,
filegrowth = 100),
-- alterar una tabla --
alter table producto
add
precio int not null

alter table producto


drop column precio

alter table producto


alter column descripcion nvarchar(150)

-- primary key --
create table producto(
id int primary key not null,
nombreproducto nvarchar(40),
descripcion nvarchar(200))
COMANDO SELECT / VISTAS
-- SELECT Y VISTAS --
SELECT telefono, nombre, id FROM dbo.Clientes

-- CUANDO REEMPLAZAS los nombres de la tablas por * las jala todas --


SELECT * FROM dbo.Clientes

Los Alias en las vistas de las tablas se agregan de la sgte. Manera:

Se le agregan los corchetes porque el alias es mas de una palabra, si solo fuera una no serian
necesarios los corchetes.

SELECT telefono AS [Telefono del cliente], nombre AS [Nombre de cliente], id AS [ID del
cliente]

FROM dbo.Clientes

Y los títulos de las columnas cambiaran

Para ordenar utilizamos el comando ORDER BY por defecto lo ordena de manera ascendete,
pero en caso de que necesitemos que sea descendete le agregamos el comando DESC.
Y también podemos llevar nuestras consultas al query a partir del código creado en las vistas
que tuvimos anteriormente:

El comando order by puede ser usado no solo en una columna de la tabla sino en varias,
funcionando como un filtro de Excel.

DE manera gráficas en las pestaña views:


EN EL QUERY

FUNCTION WHERE

Utilizamos el where como comando para los filtros


COMANDO OR que funciona como O:

Comando AND que funciona como Y:

Y si lo utilizamos en el query seria asi:

OJO NO OLVIDAR QUE DEBEMOS ESTAR EN LA BASE DE DATOS CREADA PARA ESTE CASO
SERIA LA DB “VENTAS” , Y NO EN LA MASTER
-- where --
SELECT id, nombreproducto, precio
FROM dbo.producto
WHERE (precio >= N'200') AND (precio <= N'600')
ORDER BY precio, id DESC
COMANDO INSERT
Al colocar una segunda fila de datos para insertar a la tabla, ya no es necesario
que utilicemos los nombres de las columnas de nuevo, estas las jalar por
defecto
TABLA = PRODUCTO / COLUMNAS= ID, NOMBREPRODUCTO,PRECIO
-- INSERT --
insert into producto (id,nombreproducto,precio) values(8,'producto8','700')
insert into producto values(9,'producto9','700')

select * from product


COMANDO UPDATE
Cuando queramos actualizar una nueva columna de una gran
cantidad de datos lo podemos realizar a través del comando
update, para hacerlo de golpe en un solo bloque:
-- actualización de datos - UPDATE --

UPDATE producto SET descripcion ='PRODUCTO NUEVO'

Y también se podrá realizar para ciertos elementos que se


requiera específicamente, utilizando el comando where.
UPDATE producto SET nombreproducto='automovil',precio='900',descripcion='auto
nuevo'
where id= 2
COMANDO DELETE

Este comando nos será útil para borrar los datos de una tabla, mas no la tabla,
es importante tener un backup antes de ejecutar este comando en caso de que sea
necesario, es por eso que se debe tener mucho cuidado antes de ejecutarlo.

Para guardar los datos de tu tabla vas a la pestaña superior izquierda y escoges
la opción FILE / SAVE RESULTS AS/ “ Escoges la dirección” por defecto lo guardará
en csv .

-- ELIMIMNACION DE DATOS - DELETE --

DELETE from producto

Elimina los datos, mas no la tabla.


COMANDO BULK

Ahora para recuperar o insertar lo que habíamos guardado anteriormente


digitaremos el siguiente código:

Para este ejemplo se cambio el nombre del csv, pero se jala de la siguiente
manera:

-- COMANDO BULK INSERT --

BULK
Insert dbo.producto
from 'C:\csv\productos.csv'
with (firstrow = 2, fieldterminator = ';',rowterminator = '\n')

El firstrow es para que empiece a importar a partir de la segunda fila, el


fieldterminator ';' es para que haga salto entre columnas, y el rowterminator
'\n' indica el salto entre fila y fila.

Para poder digitar ese código es importante verificar como esta el csv, que se
guardo anteriormente.

Y por ultimo ejecutamos el código y nos saldrá de la sgte. Manera:


COMANDO DELETE

-- COMANDO DELETE --

Ahora si queremos eliminar una fila en especifico también se puede hacer con el
siguiente código:

DELETE FROM dbo.producto where id = 8

COMANDO TOP

Nos servira para poder visualizar un numero determindao de valores de la tabla a


la que le hacemos el query; De la sgte manera:

-- COMANDO TOP --
select * from producto
--MUESTRA LOS 5 PRIMEROS--
select top (5)* from producto
--MUESTRA EL 100% DE LOS DATOS--
select top (100)percent * from product

COMANDO BETWEEN

Nos ayudara una vez mas en temas de visualización ya que podremos ver los valores
de una tabla que esten comprendidos en el rango que nosotros declaremos.

De la sgte manera:

-- COMANDO BETWEEN --

SELECT * FROM producto


SELECT * FROM producto where (precio between 100 and 400)
COMANDO LIKE

Este comando nos servirá para poder visualizar datos específicos de una columna
de la tabla que contengan el prefijo o sufijo o palabra que declaremos, además
podremos agregar el símbolo % el cual indicara que hay más letras delante o
detrás de la o las letras que declaremos, como en el sgte, ejemplo:

--COMANDO LIKE--

select * from producto

select * from producto where nombreproducto like 'auto%'

select * from producto where nombreproducto like '%to%'


COMANDO IN

Tambien este comoando nos ayudara para temas de visualización en las consultas en
donde nosotros buscamos valores en una determinada columna por lo que en vez de
seguir declarándola una y otra vez con el OR utilizaremos el IN que nos ayudara a
simplificar el código obteniendo los mismos resultados, en este caso este comando
nos sirve para buscar palabras en especifico, mas no una parte de ellas:

-- COMANDO IN --
select * from producto where nombreproducto = 'automovil' OR nombreproducto =
'producto 3'

Evitaremos usar el código en la parte superior porque ese es muy repetitivo, caso
opuesto usamos el IN, con la misma función.

select * from producto where (nombreproducto IN ('automovil','producto


5','producto 6'))

CONSULTAS MULTIPLES

Podemos visualizar la tabla con filtros diferentes para cada columna haciendo
usando del OR o del AND para poder relacionar y declarar los valores que
deseamos, haciendo uso del where, like, and, or, in; asi como en el sgte,
ejemplo:

-- CONSULTA MULTIPLE --

SELECT * from Clientes

SELECT * from Clientes where (nombre like 'l%') or (telefono like '%65%')
COMANDO FOREIGN KEY

Nos sirve para relacionar la primary key de una tabla con otra, en donde por
ejemplo relacionaremos a un mismo id de usuario con datos completamente distintos
de otras tablas pero que le pertenecen a ese único usuario.

Con el siguiente código, utilizaremos como referencia a la dbo.Clientes creando


la tabla dbo.infocliente:

-- COMANDO FOREIGN KEY --

create table infocliente (


id_cliente int foreign key (id_cliente)
references Clientes (id),
direccion nvarchar(50),
cedula int not null)

Para visualizarlo en el query utilizamos

select * from infocliente

Para poder rellenar los datos que se quieren relacionar con el id utilizamos el
sgte código:

insert into infocliente values (6,'av. jesus,arequipa',5648684)


COMANDO INNER JOIN

Nos servira para poder mostrar consultas relacionadas entre tablas y los
elementos que esten relacionados directamente a través del forign key que vimos
anteriormente.

 El T3 Y T4 estan funcionando como alias de cada tabla para poder generar


el código.

-- COMANDO INNER JOIN --

Select * from Clientes T3


inner join infocliente T4
on T3.id = T4.id_cliente

Podremos visualizarlo en el query a través del código:

Y Tambien a partir de generar una nueva vista a través del VIEW:


COMANDO LEFT RIGHT FULL

Nos permite temas de visualización respecto de las tablas que han sido
relacionadas previamente, tal como sus nombres lo dicen te mostraran la data
completa de acuerdo al sentido de las mismas por ejemplo comando LEFT:

En el view solo reemplazamos el inner por left/right/full y el outer se


autorellena por defecto.

RIGHT mostrara derecha y el full todo.

En el query lo colocaríamos asi:


COMANDO UNION

Para utilizar el comando unión, también tenemos que tern en cuenta que las tablas
tienen que tener el mimso numero de columnas descripción y características, ya
que sin eso no nos permitirá juntarlas.

-- COMANDO UNION --

CREATE TABLE Clientes2 (


id int,
nombre nvarchar(20),
telefono int)

DROP TABLE Clientes2

select * from Clientes


UNION
select * from Clientes2
COMANDO AVERAGE

Para este caso necesitamos tener una tabla en la cual deseemos obtener el
promedio ya que average=promedio, luego cargamos la vista y ejecutamos el
siguiente código en el VIEW:

De la misma forma si quisiéramos hacer un query, utilizamos el mismo principio


COMANDO SUM

Para sumar los datos de una tabla, se puede realziar en el viewer:

Y podemos poner restricciones tales como el and / or utilizando el comando where.

SELECT SUM(total) AS [Total de ventas]

FROM dbo.ventas

WHERE (año = '2014') AND (mes = '01') OR

(mes = '03')
COMANDO MAX Y MIN

SELECT MAX(total) AS [total maximo]

FROM dbo.ventas

SELECT MIN(total) AS [total minimo]

FROM dbo.ventas

COMANDOS PARA MOSTRAR EL ULTIMO Y PRIEMR DATO SQL SERVER

-- COAMDNO PARA EL PRIMERO --

select top(1) * from dbo.ventas

--Y EL ULTIMO --

select top(1) * from dbo.ventas


order by id DESC
COMANDO COUNT

Este comando nos ervira par contabilizar el nimero de registros o datos que
poseemos:

-- COMANDO PARA CONTAR --

SELECT COUNT(id) as [Cantidad de ventas] from dbo.ventas

where mes > '02'


DICCIONARIO DE BASE DE DATOS

Este código nos servirá para poder obtener como su nombre lo dice un diccionario
de la base de datos en donde podremos visualizar las tablas, columnas y el tipo
de datos que estos almacenan, en su totalidad.

Para poder ejecutarlo debemos de verificar que estemos en la database que vamos a
consultar.

use Ventas1

--________Diccionario de datos de una base de datos en Sql server___________

--Un diccionario de datos es un conjunto de metadatos que contiene las


--características lógicas y puntuales de los datos que se van a utilizar
--en el sistema que se programa, incluyendo nombre, descripción, alias, contenido
-- y organización.

select
d.object_id,
a.name [table], -- identificara la Tabla
b.name [column], -- identificara la columna
c.name [type], -- identificara el Tipo
CASE-- recibe el tipo de columna
--cuando c es numerico o c es decimal o c es Float
entonces se precisa el numero
WHEN c.name = 'numeric' OR c.name = 'decimal' OR c.name = 'float'
THEN b.precision
ELSE null
END [Precision],
-- recibe maximo tamaño de b
b.max_length,
CASE -- recibe si la columna acepta nulos
WHEN b.is_nullable = 0 THEN 'NO'
ELSE 'SI'
END [Permite Nulls],
CASE -- recibe si la columna es identity (autoincrementable)
WHEN b.is_identity = 0 THEN 'NO'
ELSE 'SI'
END [Es Autonumerico],
ep.value [Descripcion],-- recibe la descripcion de la columna(si la hay)
f.ForeignKey, -- recibe si es llave foranea
f.ReferenceTableName, -- recibe la referencia de la tabla
f.ReferenceColumnName -- recibe la referencia de la columna
from sys.tables a
-- // Seleciona y muestra toda la informacion \\ --
inner join sys.columns b on a.object_id= b.object_id
inner join sys.systypes c on b.system_type_id= c.xtype
inner join sys.objects d on a.object_id= d.object_id
LEFT JOIN sys.extended_properties ep ON d.object_id = ep.major_id AND
b.column_Id = ep.minor_id
LEFT JOIN (SELECT
f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id,fc.parent_column_id) AS
ColumnName,
OBJECT_NAME (f.referenced_object_id) AS
ReferenceTableName,

COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS
ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON
f.OBJECT_ID = fc.constraint_object_id) f ON f.TableName =a.name AND
f.ColumnName =b.name
WHERE a.name <> 'sysdiagrams'
ORDER BY a.name,b.column_Id
CREACION DE PROCEDIMIENTOS ALMACENADOS STORE PROCEDURES

Este comando nos servirá para poder almacenar querys o consultas sin la necesidad
dee estar reescribiiendolas y por ello nos servirá para cualquier nombre o
usuario porque nos servirá como una plantilla.

-- STORED PROCEDURES --

CREATE PROCEDURE sp_consulta @nombre nvarchar(20), @telefono int


as
begin

Select * from Clientes2 where nombre = @nombre and telefono = @telefono;


print 'hecho correctamente';

end

Al ejecutar el código se almacenara en Programmability y de ahí lo podemos jalar


sin necesidad de reescribirlo.

Ahora para ejecutarlo tendremos que escribir el comando EXEC seguido del nombre
del procedimiento.

COMO CREAR UN NUEVO PROCEDURE (SACADO DEL SQL)

-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
-- Add the parameters for the stored procedure here
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> =
<Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> =
<Default_Value_For_Param2, , 0>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here


SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO
COMANDO IDENTITY

Nos sirve para crear una tabla que contenga un id que se incremente de manera
autónoma, además podremos especificar desde que numero queremos que empiece y de
cuanto en cuanto seria su incremento, esto lo podemos hacer luego de digitar
identity(,) en el primer espacio dentro del paréntesis colocaremos desde que
numero deseas que empiece y en el segundo campo luego de la coma de cuanto en
cuanto quisiéramos que sea su incremento.

Caso contrario si deseas que el incremento sea de 1 en 1 y empiece desde el 1, no


es necesario que aumentes los paréntesis luego del identity.

-- IDENTITY --

create table pruebaidentity(


id int primary key identity (20,5) not null,
nombre nvarchar (50)
)

Y también se peude creara a partir del modo de vista por la creación de tabla, de
la sgte manera:
Buscamos en als propiedades de la tabla y cambiamos el identity a yes, y también
se puede especificar su inicio y su incremento.

Y terminas de crear la tabla.

COMANDO TRUNCATE

Lo que hace es formatear la tabla desde cero, como en el caso pasado vimos que se
crean automáticamente los ids de manera sucesiva pero que pasa si solo usas el
delete, la secuencia sigue y no se reinicia, por eso es que se utiliza el comando
truncate y esto hace que se formatee la tabla.

--truncate --

truncate table pruebaidentity


COMANDO MAYUSCULA-UPPER Y MINUSCULA-LOWER

-- mayusculas y minusculas --

create table palabras(


palabra1 nvarchar(20) not null,
palabra2 nvarchar(20) not null)

SELECT * FROM PALABRAS

insert into palabras values ('hola','MUNDO')

select upper(palabra1)as palabra_may , lower(palabra2) as palabra_min from


palabras
TRANSACT SQL (LENGUAJE DE PROGRAMACION)

El comanmdo print nos sirve para mostrar ciertos mensajes, en la pantalla pero,
que pasa al tener dos distintos tales como nvarchar y el int?, pues no nos
permitiría mostrarlos juntos, es por eso que se hace una conversión como nvarchar
p-- TRANSACT SQL VARIABLES --

declare @texto nvarchar(20)


set @texto = 'hola mundo'
declare @numero int
set @numero = 35

print 'T-SQL dice = '+ @texto + ' y el numero: ' +


convert(nvarchar(20),@numero)ara que se pueda visualizar.
TRANSACT SQL

Nos mostrara el valor de esto como mensaje:

--T-SQL - El lenguaje sql normal combiando con el t-sql --

declare @textos nvarchar(20)


--set @textos = 'dd'
declare @edad int

--create table tsql(


--nombre nvarchar(20),
--edad int)

--drop table tsql

select @textos = nombre, @edad = edad from tsql where edad = 23

print @textos + ' ' + convert(nvarchar(15),@edad)


OPERADORES EN T-SQL

Las operaciones que se permiten en el t-sql son las que se visualizan en la


imagen de abajo, solo cabe resaltar que al hacer una división solo nos mostrara
el cociente entero, mas no el residuo o lo faltante, entones para ver el faltante
tenemos que agregarle la operación % para que con esto nos muestre el residuo.

-- OPERADORES T-SQL --
-- + - * / %(MOD)

declare @num1 int


declare @num2 int

set @num1 = 10
set @num2 = 3

print @num1 / @num2


print @num1 % @num2
COMANDO IF

Como sabemos esta es condicional, y lo utilizaremos de la sgte forma:

-- IF --

declare @num1 int


declare @num2 int

set @num1 = 2
set @num2 = 5

if @num1 = @num2
print 'son iguales'
else
if @num1 > @num2
print convert (nvarchar(3),@num1) + ' es mayor que '+ convert(nvarchar(3),@num2)
if @num1 < @num2
print convert (nvarchar(3),@num1) + ' es menor que '+ convert(nvarchar(3),@num2)
COMANDO WHILE

Sirve para declarar ciclos, es como un if.

-- while --

declare @cont int


set @cont = 0

while (@cont < 100)


begin
print 'hola, soy el numero:' + convert(nvarchar(5),@cont)
set @cont=@cont +1
end
COMANDO SWITCH

Utilizaremos este comando cuando querramos hacer consulta de que cierta variable
contenga valores específicos del tipo texto, y podremos hacer que imprima
dependiendo del caso tal como el sgte ejemplo:

-- CASE (SWITCH) | T-sql --

declare @avion nvarchar(50)


declare @estado nvarchar(50)
declare @aviso nvarchar(50)

set @avion = 'condor'


set @estado = 'cargando'

set @aviso = (case @estado


when 'volando' then 'el avion: '+ @avion + '
esta volando'
when 'detenido' then 'el avion: ' + @avion + '
esta detenido'
when 'cargando' then 'el avion: ' + @avion + '
se esta cargando en este momento'

end
)

print @aviso
COMANDO TRY CATCH / T -SQL

Utilizamos este código para el control de errores

Antes de comenzar el código, debemos inicizalizar el begin try/ end try ; luego
begin catch / end catch

Este es el caso en que no editemos lso erroes, nos saldrán mesnajes asi

Ahora utilizando el código en la parte superior podemos llegar a esto:

-- Try catch | T-sql --

begin try

declare @edad int


set @edad = 'veinte'
print @edad

end try
begin catch

print 'error al convertir de varchar a int'


print error_message()

end catch
Y nos saldrá lo que nosotros editemos, entonces también se puede omitir el print
error_message(), ya que eso nos sirve para que nos salga el mensaje de error
proporcioando por el programa pro defecto.

CREACION DE UN CURSOR

El cursor también nos servirá para mostrar datos, funciona como un query.

El deallocate nos servirá para liberar la memoria donde se encontraba el cursor.

Ahora para poder ver el primer valor colocamos first o prior en vez de next luego
de fetch, además si queremos ver el ultimo colocamos last en vez de next luego de
fetch.

Primero debemos declarar nuestro cursor:

Con esto podemos borrar la memoria del cursor:


Ahora procedemos a abrir el cursor ejemplo y luego ejecutamos para su porteiror
visuzalicaion:

Hay que ejecutarlo uno por uno, no hay necesidad de abrri el cursor mas de una
vez. Ya que nos aparecerá un mensaje de error.

Ahora para poder ejecutar el comando de mostrar primero o ultimo debemos agregar
el comando scroll al costado del cursor, asi; gracias a ese scroll podremos
navegar en los valores de atrás hacia adelante:

-- CURSOR --

declare Cursorejemplo Cursor scroll


for select * from Persona

open Cursorejemplo
fetch first from Cursorejemplo

close Cursorejemplo
deallocate Cursorejemplo
 EJEMPLO DEL CURSOR –

Podemos utilizarlo para que nos muestre con el T-sql, y también podemos
usarlo para llevar los datos de una tabla a otra, además de actualizar los
datos :

-- EJEMPLO DEL CURSOR --

declare @nombre nvarchar(50)


declare @apellido nvarchar(50)
declare @telefono nvarchar(50)

declare Cursorejemplo Cursor scroll


for select * from Persona

open Cursorejemplo
fetch next from Cursorejemplo into @nombre,@apellido,@telefono
while(@@FETCH_STATUS = 0 )
Begin
print @nombre + ' '+ @apellido + ' ' + @telefono;

fetch next from Cursorejemplo into @nombre,@apellido,@telefono

end

close Cursorejemplo
deallocate Cursorejemplo
COMO AGREGAR UNA BD DE DATOS EXTERNA Y PODER LLEVARLO A NUESTRO SQL

Hay 2 archivos .mdf, .ldf que es como un log ósea un historial de la base de
datos; c:\Microsto SQL SERVER … ; ENTONCES luego de haber ubicado la carpeta
en donde se guardan estos archivos, copeamos los que nosotros deseamos
importar, y los pegamos allí:

Luego click derecho en databases y le damos ATTACH, nos sale la sgte ventana:
Luego picamos en add y nos sale la ubicación de los data base que pegamos
para poder jalarlos:

Seleccionmamos la que queramos y le damos ok y luego otro ok, luego


actuzlizamos y ya debería de estar el database.
TRIGGERS / DISPARADORES/

Son aquellos que se van a activar luego de que una serie de procedimientos se
efectúen, en este caso hablaremos de los DML que se utilizan para
insert,update y delete.

For – insert : Cuando utilizamos el for este se realizara antes o a la vez


del insert.

Entonces primero debemos de ejecutar el código para la creación del trigger,


luego de ello veremos su aplicación:

Luego de que ha sido creado, procederemos a ejecutar el procedimietno de


insert en la tabla dicha para que el trigger actue:
Y asi podemos ver que el trigger ha funcionado porque nos aparecio el
mensaje, y además este se realizo antes del insert.

Y por ultimo el instead of lo colocarias en vez del after quedando asi


instead of insert; y ya luego de ello lo que hace es, que ejecuta lo que se
coloca luego del as y ya no lo del insert.

Mas adelante veremos una mejor aplicación para los trigger el hecho de
haber colocado el print luego del as fue solo con fines educativos para
demostrar como funciona un trigger, ya que la idea es poder ejecutar otro
tipo de código mas elaborado.
EJEMPLO DE UN TRIGGER

En este caso nos servirá para poder tener un registro de modificación de una
tabla en la cual la llenaremos con el insert, en donde podremos tener una
actualización de dicha tabla en la que nos mostrara un registro de que es lo que
ha sucedido en la tabla predecesora.

El código es el siguiente

-- ejemplo insertar en log (historial) --

create trigger TR_persona_insert


on Persona
for insert
as
begin
set nocount on;-- evita que se muestre el doble mensaje en donde nos dice
que se han realizado los cambios en las dos tablas--
insert into log_historial(
nombre,fecha,descripcion) select nombre,getdate(),'se insertaron datos en
la tabla'
from inserted
end

El set nocount on, nos servira para omitir un segundo mensaje de modificación de
la segunda tabla donde nos esta guardando los datos; es mas para tenerlo como
cuidado y que nadie que lo este modificando sepa de ello.

Ahora el INSERTED que vemos dentro del código es una tabla virtual en donde se
guardan temporalmente todos los datos que van a ser copeados en la tabla de
destino, es decir los datos de la tabla de origen son almacenados momentáneamente
en inserted y luego pasan a la tabla de destino.

Luego de ejecutar el insert este dato será automáticamente, llevado a la tabla


log_historial en donde se guardara .

Recordar ejecutar el trigger antes de … , también se creo la tabla log_historial


antes de todo.
EJEMPLO CON DELETE

En este ya no hay una tabla inserted, ahora es deleted.

-- ejepmlo eliminar/delete - TRIGGER --

create trigger TR_persona_delete


on Persona
instead of delete
as
begin
set nocount on;
insert into log_historial(nombre,fecha,descripcion)
select nombre,GETDATE(),'se han eliminado registro en la tabla'
from deleted
end

go
EXPORTAR REGISTROS A XML

-- Exportar registros a XML --

select * from dbo.Persona


for Xml raw ('Registro'),elements,root('XML')

select * from dbo.Persona


for Xml auto

select * from dbo.Persona


for Xml raw, elements, root
IMPORTAR DE EXCEL A SQL

OJO EL ARCHIVO DE EXCEL DEBE SER GUARDADO COMO 97-2003.XLS

Tenemos que dar guardar el archivo de la tabla con un nombre de la hoja, luego
vamos al sql escogemos la base de datos, clic derecho, tasks, import, sale una
ventana:

En data source buscamos la opción Excel

Luego de ubicar el archivo tenemos que colocarlo en el servidor:


Next

Next
Puedes darle edit mappings y modificar los datos …

Next next
EXPORTAR UNA TABLA DE SQL A EXCEL

Para poder exportarlo debemos haber creado previamente un archivo de excel de


destino, no olvidar que el formato debe ser 97-2003.xls Y el proceso es similar
al anterior.

Damos clic a la base de datos donde esta la tabla, clic derecho, tasks, export,
te sale una ventana , escogemos el server client sql, next, luego buscas el
archivo de Excel, next, next, y te salela tabla de abajo, la editas, y next next
hasta el final.

Es importante borrar el símbolo de dólar ya que al momento de llevarlo al Excel


no lo va a pegar, encontrara dificualtades por eso hay que borrarlo.
INSERTAR CONTENIDO DE UNA TABLA A OTRA

Primero necesitamos que la segunda tabla de destino tenga las mismas


características que su predecesora:

Y procedemos a digitar el siguiente código:

-- Insertar una tabla de contenido a otra --

insert into practica (id,nombre,apellido,numero)


select * from PracticaSQL$

Y los datos se copiaran


DATENAME

En el primer espacio del paréntesis tenemos que colocar es lo que queremos y


luego de la coma, de donde lo queremos.

-- DATENAME --

--month, quarter, year, dayofyear, day, week, weekday, hour, minute, second,
millisecond --

Print datename (second,getdate())

Como generar muchos archivos por decir millones?

Simplemente

Insert into (nombre de la tabla) select *from (nombre de la tabla)

Y lo repites las veces que queiras

Un video para mas expliacion

https://www.youtube.com/watch?v=oVZjHQt9518&list=PL8gxzfBmzgewF28S8REkfHacaSRnwp
JeB&index=54
PARA VER MAS INFORMACION ACERCA DEL VIEW -

Para poder visualizar esto solo tenemos que digitar el sgte código.

sp_help el cual nos mostrara la información de todo el sql, sus tablas, views y
demás.

Sp_helptext view_ejemplo / CON este código podemos ver espeficamente lo que


contiene un view en este caso especifico y nos mostrara su query.

Tambien sp_depends view_ejemplo, nos mostrar de que tablas depende todo el view:

Basicamente podemos visualizar todo del view.


ENCRIPTAR LA INFORMACION DE UNA VISTA

Esto nos servirá para proteger la información de los views.

create view vista_seguridad


with encryption as
select * from Clientes

adicionamos el with encryption as para proteger el código, y nos la mostrara con


un candado,

Ahora cuando volvamos a consultar con el sp_helptext nos aparecerá que esta
protegido:
VISTA CON CHECK OPTION

Esta nos servirá para poder hacer ciertos cambios pero solo a los registros que
esten afectados por el where, y ya no cambiara a toda la tabla en general.

-- VIEW CON CHECK OPTION --

create view ver_clientes as

SELECT [Telefono del cliente]


,[Nombre de cliente]
,[ID del cliente]
FROM [ventas].[dbo].[vista_clientes]
where [ID del cliente] = 8

select * from ver_clientes

update ver_clientes set [Telefono del cliente] = 789445

delete from ver_clientes **// esto nos servirá para borrar solo los que esten
contenidos en el where y no toda la tabla //**
COMO ALTERAR / ELIMINAR UNA VISTA

Para alterarla es prácticamente como crear una nueva vista:

Solo que cambiamos el alter y vemos que es lo que quieres cambiar nada mas o bien
lo agregas o se lo quitas y lo ejecutas y listo.

Y para borrarlo simplemente es el comando: DROP VIEW

-- ALTER Y DROP PARA VISTAS --

create view ver_clientes2 as


SELECT [Telefono del cliente]
,[Nombre de cliente]
,[ID del cliente]
FROM [ventas].[dbo].[vista_clientes]

SELECT * FROM ver_clientes2

ALTER VIEW ver_clientes2 as

SELECT [Telefono del cliente]


,[Nombre de cliente]

FROM [ventas].[dbo].[vista_clientes]

drop view ver_clientes2


STORE PROCEDURES

--STORE PROCEDURES - PROCEDIMIENTOS ALAMCENADOS - PARAMETROS DE SALIDA --

create procedure SP_versalida @num1 float, @num2 float, @resultado float output
as
begin

set @resultado= @num1 + @num2;

end

declare @salida float


exec SP_versalida 20, 30,@salida out

select @salida

insert into clientes100 (id,nombre,telefono)


select * from Clientes
GROUP BY:

Tenemos que tener un cuidado especial en este caos ya que al utiliarlo tanto en
el select como en el group by, tiene que contener a todas las columnas porque
caso contrario nos mostrara un error, en este ejemplo no nos lo muestra asi ya
que la columna te loas teléfonos esta como campo calculado.

-- GROUP BY --

select id,nombre, sum(telefono) as sumadetelefonos


from clientes100
group by id, nombre
HAVING:

Funciona como un where pero, el where es registro por registro, en cambio el


having solo trabaja en group by :

-- having --

select id,nombre, telefono


from clientes100
group by id, nombre, telefono
having id > = 4
order by id
CLAUSULA EXISTS

Hace una consulta dentro de una tabla hacia otra y verificar si se repiten por
decirlo así, es decir si tienen elementos en común y cuales son.

Además es necesario tener en cuenta de que la comparación que haces es por el


nombre del campo, mas no por el contenido, si lo hiciéramos así nos mostraría un
error.
Agregamos el not exists cuando queremos ver cuales son los que no se tienen en
común.

-- clausula exists --

SELECT P.nombre from practica as P


where exists (select * from PracticaSQL$ as PS where PS.nombre= P.nombre)
DISTINCT

Usar la función Distinct para mostrar solo registros que no estén en la tabla mas
de una vez.

Se utiliza para ya no mostrar duplicados y en caso contrario si deseas ver los


que no se duplican.

Aquí tenemos el duplicado:

Utilizando el distinct evitamos el duplicado

Ahora si quisiéramos hacer la consulta completa usando el * en vez de nombre,


igual nos mostraría todo ya que toda la línea tendría que ser exactamente igual
para poder ver eso.
PIVOT Y UNPIVOT EN SQL

EN EXCEL
Y PARA EL UNPIVOT
COLUMAN CALCULABLE CON CONDICIONAL CASE

You might also like