lunes, 5 de septiembre de 2016

Como seleccionar la primera fila o registro de una tabla en SQL Server

La mayoría de las tablas que conforman las bases de datos de una empresa grande como un banco son tablas gigantescas donde se registran inmensas cantidades de transacciones de los clientes que se ejecutan a la vez cada segundo llegando a varios millones de registros por día. Si ejecutaramos un simple select * from sobre una tabla con millones de registros podríamos impactar seriamente el desempeño de la base de datos.
El comando select top sirve para especificar el numero o el porcentaje de registros que se requiere para mostrar como resultado.
El comando select top es soportado solamente por el motor de base de datos SQL Server y MS Access.

Para seleccionar la primera fila de una tabla escribiremos la siguiente instrucción:

SELECT TOP 1 <columna> FROM <tabla>

Ejemplo:

SELECT TOP 1 nombreEmpleado, cargo, sueldo FROM Empleado

En este ejemplo seleccionamos la primera fila o registro de la tabla Empleado.


Ahora si lo que queremos es seleccionar un numero especifico de las primeras filas:

SELECT TOP # <columna> FROM <tabla>

Ejemplo:

SELECT TOP 5 nombreEmpleado, cargo, sueldo FROM Empleado

En este ejemplo seleccionamos las 5 primeras filas o registros de la tabla Empleado.


Si queremos seleccionar un porcentaje de las primeras filas de una tabla:

SELECT TOP # PERCENT <columna> FROM <tabla>

Ejemplo:

SELECT TOP 50 PERCENT nombreEmpleado, cargo, sueldo FROM Empleado

En este ejemplo seleccionamos el 50% de todas las filas o registros de la tabla empleado. Es decir si la tabla Empleado tiene 100 filas o registros, se seleccionan las 50 primeras filas o registros.




domingo, 4 de septiembre de 2016

Diferencia entre delete y truncate en SQL Server

Básicamente no existe diferencia entre ambos comandos. Veamos la siguiente ecuación:

DELETE FROM Empleado = TRUNCATE TABLE Empleado

Ambas sentencias eliminan todos los datos de la tabla Empleado.

Ahora la diferencia surge cuando agregamos la palabra reservada WHERE al DELETE con lo que podemos concluir que DELETE FROM permite el borrado selectivo de los registros de una tabla mientras que TRUNCATE TABLE ejecuta un borrado total de los registros de una tabla.

Ejemplo:

DELETE FROM Empleado WHERE edad = 25 <> TRUNCATE TABLE Empleado

Estas dos sentencias son diferentes dado que en el DELETE solo se eliminan los empleados que tengan 25 años y en el TRUNCATE se eliminan todos los empleados. 

A partir de esta simple diferencia podemos enumerar mas:

  • TRUNCATE TABLE es una operación DDL (Data Definition Language) mientras que DELETE FROM es una operación DML (Data Manipulation Language) esto se refiere a que TRUNCATE TABLE es una operación para modificar la estructura de una tabla, mientras que DELETE FROM sirve para gestionar los datos de una tabla.
  • TRUNCATE TABLE no permite el borrado si es que la tabla tiene FK (llaves foráneas) en otras tablas, mientras que DELETE FROM puede eliminar los registros que tienen FK de otras tablas y no puede eliminar los registros de una tabla que tiene FK en otras tablas.
  • TRUNCATE TABLE es una forma rápida de eliminar todos los registros de una tabla, mientras que DELETE FROM es mas lento.
  • TRUNCATE TABLE reinicia a 1 o al valor que se especifique de un campo identity de una tabla, mientras que DELETE FROM no reinicia el valor campo identity es decir la numeración de los registros queda incompleta. 

sábado, 3 de septiembre de 2016

Tipos de JOIN en SQL Server

Los JOIN son palabras reservadas de Transact-SQL que nos permiten combinar dos o mas tablas en una base de datos en este caso SQL Server con el fin de obtener los registros necesarios para el proceso que estemos ejecutando.
Los JOIN se utilizan como filtros en las consultas de tablas de base de datos para obtener los registros que coinciden de dos o mas tablas y los registros que no coinciden entre dos o mas tablas.
Cuando ejecutamos una consulta utilizando un tipo de JOIN especifico se pueden obtener registros coincidentes uno al lado de otro si utilizamos el select * o en el orden que deseemos si especificamos los campos a seleccionar. Así también se pueden obtener los registros la primera o segunda tabla que no tienen coincidencia con la otra tabla donde los campos de los registros de esta aparecen con tipo de dato NULL.

Existen cinco tipos de JOIN:

INNER JOIN o JOIN
Permite interceptar dos tablas con el fin de extraer solo los registros que coinciden entre ambas tablas.



SINTAXIS:

SELECT <nombrecolumna>
FROM <tabla1>
INNER JOIN <tabla2>
ON <tabla1>.<nombrecolumna> = <tabla2>.<nombrecolumna>

EJEMPLO:

SELECT nombrePersona
FROM CiudadanoPeru 
INNER JOIN CiudadanoEEUU
ON CiudadanoPeru.id = CiudadanoEEUU.id

En este ejemplo queremos obtener los nombres de los ciudadanos peruanos que también tienen ciudadanía estadounidense o viceversa.


LEFT JOIN
Permite interceptar dos tablas con el fin de extraer los registros que coinciden entre ambas tablas y los registros que no coinciden de la tabla 1.


SINTAXIS:

SELECT <nombrecolumna>
FROM <tabla1>
LEFT JOIN <tabla2>
ON <tabla1>.<nombrecolumna> = <tabla2>.<nombrecolumna>

EJEMPLO:

SELECT nombrePersona
FROM CiudadanoPeru 
LEFT JOIN CiudadanoEEUU
ON CiudadanoPeru.id = CiudadanoEEUU.id

En este ejemplo queremos obtener los nombres de los ciudadanos peruanos que también tienen ciudadanía estadounidense o viceversa y los ciudadanos peruanos que no tienen ciudadanía estadounidense.


RIGHT JOIN
Permite interceptar dos tablas con el fin de extraer los registros que coinciden entre ambas tablas y los registros que no coinciden de la tabla 2.


SINTAXIS:

SELECT <nombrecolumna>
FROM <tabla1>
RIGHT JOIN <tabla2>
ON <tabla1>.<nombrecolumna> = <tabla2>.<nombrecolumna>

EJEMPLO:

SELECT nombrePersona
FROM CiudadanoPeru 
RIGHT JOIN CiudadanoEEUU
ON CiudadanoPeru.id = CiudadanoEEUU.id

En este ejemplo queremos obtener los nombres de los ciudadanos peruanos que también tienen ciudadanía estadounidense o viceversa y los ciudadanos estadounidenses que no tienen ciudadanía peruana.


FULL OUTER JOIN
Permite interceptar dos tablas con el fin de extraer los registros que coinciden entre ambas tablas y los registros que no coinciden de la tabla 1 y la tabla 2.


SINTAXIS:

SELECT <nombrecolumna>
FROM <tabla1>
FULL OUTER JOIN <tabla2>
ON <tabla1>.<nombrecolumna> = <tabla2>.<nombrecolumna>

EJEMPLO:

SELECT nombrePersona
FROM CiudadanoPeru 
FULL OUTER JOIN CiudadanoEEUU
ON CiudadanoPeru.id = CiudadanoEEUU.id

En este ejemplo queremos obtener los nombres de los ciudadanos peruanos que también tienen ciudadanía estadounidense o viceversa, los ciudadanos peruanos que no tienen ciudadanía estadounidense y los ciudadanos estadounidenses que no tienen ciudadanía peruana.


CROSS JOIN
Permite unir dos tablas cuyos registros serán el producto cartesiano de ambas tablas.

SINTAXIS:

SELECT <nombrecolumna>
FROM <tabla1>
CROSS JOIN <tabla2>

EJEMPLO:

SELECT nombrePersona
FROM CiudadanoPeru 
CROSS JOIN CiudadanoEEUU

En este ejemplo queremos obtener todas las combinaciones posibles entre los nombres de los ciudadanos peruanos y los nombres de los ciudadanos estadounidenses.




viernes, 2 de septiembre de 2016

Como ejecutar un procedimiento almacenado (Store procedure) en SQL Server

Los procedimientos almacenados son componentes de base de datos que nos permiten ejecutar procesos de inserción, selección, actualización, eliminación o la combinación de todas estas operaciones para el procesamiento de datos de una o mas tablas a la vez.

Los procedimientos almacenados son ejecutados a través de dos componentes software:
- Las aplicaciones desarrolladas en un lenguaje de programación.
- Los paquetes DTSX de Procesos Batch.

Otro escenario donde se puede hacer uso de los procedimientos almacenados es en las pruebas unitarias de componentes software donde debemos asegurarnos que el procedimiento almacenado produzca el resultado esperado ya sea una selección de datos o un mensaje, lo cual es importante para que al momento de integrar el procedimiento almacenado al sistema no existan fallos.    
Para ejecutar un procedimiento almacenado (Store Procedure en ingles) en SQL Server basta con solo escribir el siguiente código:

EXEC <procedimientoalmacenado>


Ejemplo:

EXEC insertarDatosEmpleado

-------------------------------------------------------------------------------

Si el procedimiento almacenado tiene parámetros:

EXEC <procedimientoalmacenado> numero, 'texto'


Ejemplo:

EXEC actualizarDatosEmpleado 2016, 'Gerente'

-------------------------------------------------------------------------------

Si el procedimiento almacenado recibe variables como parámetros:

DECLARE <variable1> <tipoDato> (longitud), <variable2> <tipoDato2> (longitud)

SELECT TOP 1 <variable1> = valor1, <variable2> = valor2 FROM <Tabla>

SELECT <variable1>, <variable2>

EXEC <procedimientoalmacenado> <variable1>, <variable2>


Ejemplo:

DECLARE nombre varchar (20), apellido varchar (20)

SELECT TOP 1 nombre = nombreEmpleado, apellido = apellidoEmpleado FROM Empleado

SELECT nombre, apellido

EXEC insertarAscensos nombre, apellido

-------------------------------------------------------------------------------

Si el procedimiento devuelve un mensaje o un resultado:

DECLARE <variable> <tipoDato>(longitud)

EXEC <procedimientoalmacenado> <variable> output

SELECT <variable>


Ejemplo:

DECLARE mensaje varchar (30)

EXEC procesarSueldoEmpleado mensaje output

SELECT mensaje


jueves, 1 de septiembre de 2016

Como cambiar el nombre de una columna o una tabla en SQL Server

En la ingeniería de software existe un etapa de este proceso llamada Diseño el cual se materializa en un documento donde se plasman las especificaciones técnicas de los componentes de software, los cuales se ven afectados ante una modificación en la practica. Tomando esta introducción como un punto de partida podemos decir que al haber creado una tabla con sus columnas, los nombres que tienen han sido dados por el cliente al que estamos haciendo el trabajo y dicho cliente puede modificar el nombre de la tabla o nombre de las columnas en cualquier momento, con lo cual debemos modificar el documento de diseño tecnico para que este actualizado. Ya sea si estemos trabajando para un cliente o haciendo un proyecto propio cuando debamos cambiar el nombre de una tabla o el nombre de una columna por diversos motivos, debemos aplicar el comando sp_rename:

Sintaxis para tabla:

EXEC sp_rename 'Esquema.Nombre actual de la tabla', 'Nombre nuevo de la tabla';

Ejemplo:

EXEC sp_rename 'dbo.Cliente', 'Comprador';

Sintaxis para columna:

EXEC sp_rename 'Esquema.Tabla.Nombre actual de la columna', 'Nombre nuevo de la columna', 'COLUMN';

Ejemplo:

EXEC sp_rename 'dbo.Cliente.Telefono', 'NumeroTelefonico', 'COLUMN';

miércoles, 31 de agosto de 2016

Como ver la estructura de una tabla en SQL Server

Para ver la estructura de una tabla en SQL Server podemos utilizar la siguiente instrucción:

sp_columns <Nombre de la Tabla>;

Ejemplo:

sp_columns Alumnos;

Este comando nos permitirá saber lo siguiente: 
- Base de datos
- Esquema
- Tabla
- Nombre de las columnas
- Tipo de dato
- Longitud
- Escala (longitud de los decimales)
- Nulable (Si acepta valores nulos o no)
- Posición en la tabla

Es de mucha utilidad cuando tenemos un proceso donde estamos cargando un archivo plano en una tabla y las columnas de dicho archivo tienen longitudes mayores a las longitudes de las columnas de la tabla o el tipo de dato de una o mas columnas del archivo es diferente al tipo de dato de una o mas columnas de la tabla a la cual queremos llenar con los datos del archivo, lo cual como sabrán da error ya que no se puede insertar datos con una longitud mayor a la longitud de un campo de una tabla y tampoco insertar un tipo de dato diferente en una columna con otro tipo de dato.
Con esta información entonces podemos proceder a hacer los cambios en los tipos de datos y longitudes de los campos del archivo o de la tabla (es mas probable que se hagan los cambios en el archivo ya que la tabla tiene un diseño fijo) para solucionar el problema.

Bienvenido a Sistemaniaco

Hola quiero darte la bienvenida a Sistemaniaco, un blog dirigido a todos los apasionados por la informática y donde podrás encontrar la ayuda a tus tareas diarias ya sea en la universidad o trabajo.

Aquí encontraras guías, manuales y trucos que te darán la solución a aquellos problemas cotidianos que a todos nos dificultan la entrega de un trabajo excepcional.

Podrás conocer y reforzar temas de los diferentes campos de la informática que poco a poco iremos incrementando con el correr del tiempo.

Para comenzar iremos colgando los temas mas requeridos en base de datos e inteligencia de negocios como paquetes DTSX, los cuales son muy importantes en los procesos Batch de una empresa.

Espero que disfrutes tu estadía en Sistemaniaco y que te sirva de mucho ya seas un estudiante o un profesional!

Saludos!