Mostrando entradas con la etiqueta sql server. Mostrar todas las entradas
Mostrando entradas con la etiqueta sql server. Mostrar todas las entradas

lunes, 10 de septiembre de 2018

¿Cómo genero una llave GUID en Excel?


Cuando diseño bases de datos, generalmente uso llaves subrogadas para identificar de manera única los registros e índices únicos para definir como única la entidad (lógica del registro), sin embargo, hasta hace algún tiempo venia empleando llaves subrogadas numéricas como identificador de los registros y dejaba la carga a la base de datos de generarlos como por ejemplo: Secuencias para Oracle, Identity para SQL Server o Seriales para PostgreSQL, sin embargo, hace poco comencé a usar los GUID y estoy encantado con uso.

Algunas ventajas de uso:

  • ·         No requiero Scripts complejos para trasladar información entre tablas.
  • ·         Son casi que irrepetibles es 10^38.
  • ·         Los puedo generar desde el aplicativo, adiós a las secuencias.
  • ·         Facilita la migración del modelo entre Bases de Datos.

Los inconvenientes que le veo son:
  • ·         Dificulta la búsqueda de un registro por consultas creadas a mano (depuración)
  • ·         Genera un mayor consumo en Bases de Datos  (No tan relevante hoy en día)
  • ·         Puede disminuir el rendimiento de las consultas.


Ahora si te interesa llaves GUID y necesitas cargar datos, por ejemplo: cargar un listado de datos desde un Excel. 

Aquí te dejo la formula para crear GUID desde Excel.
=MINUSC(CONCATENAR(DEC.A.HEX(ALEATORIO.ENTRE(0;4294967295);8);"-";EXTRAE(DEC.A.HEX(ALEATORIO.ENTRE(0;4294967295);8);1;4);"-";EXTRAE(DEC.A.HEX(ALEATORIO.ENTRE(0;4294967295);8);1;4);"-";EXTRAE(DEC.A.HEX(ALEATORIO.ENTRE(0;4294967295);8);1;4);"-";EXTRAE(DEC.A.HEX(ALEATORIO.ENTRE(0;4294967295);8);1;6);EXTRAE(DEC.A.HEX(ALEATORIO.ENTRE(0;4294967295);8);1;6)))

Para finalizar les recuerdo:

·         Cada quien tiene su forma de matar pulgas, así que puede haber una gran cantidad de maneras de hacer el mismo trabajo.
·         Estos artículos son ejemplos; así que, si tienes una mejor manera de hacerlo, o puedes colaborarme con alguna observación, tu comentario es bienvenido.
·         No asumo ninguna responsabilidad por el uso de lo expuesto.
·         Si los artículos te son de utilidad, no olvides un “Me Gusta”, o dejar algún comentario.


viernes, 14 de agosto de 2015

Hacer copias de seguridad y restauraciones por línea de comandos en SQL Server


Hace poco intente restaurar una copia de seguridad en un equipo desde el “Microsoft SQL Server Management Studio” utilizando las opciones del menú, desafortunadamente por permisos o algún problema con el ordenador, no pude hacerlo, así que investigue como hacer la restauración y de paso la copia de seguridad por medio de línea de comandos.
Para copia de seguridad:
BACKUP DATABASE [Nombre base de datos] TO DISK = 'C:\Copias\BaseDeDatos.Bak' WITH init

Para restaurar:
RESTORE DATABASE [Nombre base de datos] FROM DISK = ' C:\Copias\BaseDeDatos.Bak' WITH REPLACE


Espero que esto les sea de utilidad.

miércoles, 8 de abril de 2015

Campo calculado para mostrar la edad en años - SQL Server

Existen muchas maneras fórmulas para calcular la edad, la más sencilla que he encontrado es la de calcular los días de diferencia entre dos fechas y dividirlos entre 365.25 que son los días de un año. Para lo anterior utilizo la función de SQL server DateDiff. A continuación el ejemplo:


set dateformat dmy
Declare @FechaNacimiento as Date = Cast('08/04/2010' as Date)

Select Cast((DATEDIFF(day,@FechaNacimiento , GetDate())/365.25) as int) Edad


Es una formula sencilla pero que me a ayudado mucho. Espero les sirva y si les es de utilidad, no olvides dejar un Like en el artículo.

viernes, 30 de enero de 2015

Traer el último registro de un grupo de registros


Traer el último, primer, etc.  registro de un grupo de registros

En algún momento necesite consultar el último registro ingresado en una tabla detalle por cada registro de la tabla padre, No es traer los primer registro de una consulta “TOP 1”. Para hacerme entender, he creado el siguiente ejemplo:

Tabla maestra “Cliente”
IdCliente
Cliente
1
Homero
2
Barth
3
Lisa
4
Batman
5
Superman

Tabla detalle “Factura”
IdFactura
IdCliente
Valor
Fecha
1
1
50
01/01/2015
2
1
55
01/01/2015
3
1
45
03/01/2015
4
2
38
03/01/2015
5
2
45
03/02/2015
6
3
60
01/02/2015
7
4
54
15/01/2015
8
4
66
03/02/2015
9
5
70
02/02/2015
10
5
62
03/01/2015
11
5
33
02/01/2015

La consulta de todos los datos:
Select Cliente.IdCliente
       ,Cliente.Cliente
       ,Factura.IdFactura
       ,Factura.Fecha
        ,Factura.Valor
From Cliente
     Inner Join Factura On Cliente.IdCliente = Factura.IdCliente

El resultado:
IdCliente
Cliente
IdFactura
Fecha
Valor
1
Homero
1
01/01/2015
50
1
Homero
2
01/01/2015
55
1
Homero
3
03/01/2015
45
2
Barth
4
03/01/2015
38
2
Barth
5
03/02/2015
45
3
Lisa
6
01/02/2015
60
4
Batman
7
15/01/2015
54
4
Batman
8
03/02/2015
66
5
Superman
9
02/02/2015
70
5
Superman
10
03/01/2015
62
5
Superman
11
02/01/2015
33


Ahora necesito extraer la última factura registrada por cada cliente, para eso necesitamos traer el máximo IdFactura por cliente. Para lo anterior utilizo una sub consulta en el Inner Join que me permita traer el máximo IdFactura ingresado por cliente y posteriormente lo incluyo como parte de un segundo Inner Join para poder traer la data como se puede apreciar en la siguiente tabla.

IdCliente
Cliente
IdFactura
Fecha
Valor
1
Homero
3
03/01/2015
45
2
Barth
5
03/02/2015
45
3
Lisa
6
01/02/2015
60
4
Batman
8
03/02/2015
66
5
Superman
11
02/01/2015
33

A continuación la consulta.
Select Cliente.IdCliente
,Cliente.Cliente
,Factura.IdFactura
,Factura.Fecha
       ,Factura.Valor
From Cliente
Inner Join (Select Max(IdFactura) As Id, IdCliente From Factura Group By IdCliente) As Fact On Cliente.IdCliente = Fact.IdCliente
        Inner Join Factura On Cliente.IdCliente = Factura.IdCliente  And Fact.Id = Factura.IdFactura
Order By IdCliente

No es la más eficiente pero es una manera de consultar muy sencilla.

Entrada destacada

Arquitectura de N-Capas con Visual Studio .NET y AngularJS

Este artículo es el primero de una serie de artículos en que quiero explicar mi visión de la programación por capas. La Arquitectura ...