SQL-Server: Consulta para saber cuántas tablas o vistas hay en una base de datos

¿Manejas una base de datos en SQL-Server? ¿Quieres saber cuántas tablas tienes en tu base de datos? ¿Y cuántas vistas? ¿Y ambas? Estas consultas te darán esa información:

#Contar Tablas
SELECT COUNT(*) from Information_Schema.Tables where TABLE_TYPE = 'BASE TABLE'

#Contar Vistas
SELECT COUNT(*) from Information_Schema.Tables where TABLE_TYPE = 'VIEW'

#Contar Tablas y vistas
SELECT COUNT(*) from Information_Schema.Tables 
Anuncios

SQL-Server y capitalización compuesta: calcular el capital final.

Ayer veíamos cómo calcular el capital final y los intereses sobre un importe aplicando la formula de la capitalización simple en una consulta de SQL-Server. Hoy vamos a ver cómo calcular el capital final, pero con la fórmula de la capitalización compuesta:

La capitalización compuesta es una fórmula financiera que permite calcular el equivalente de un capital en un momento posterior.

La diferencia entre la capitalización simple y la compuesta radica en que en la simple sólo genera intereses el capital inicial, mientras que en la compuesta se considera que los intereses que va generando el capital inicial, ellos mismos van generando nuevos intereses.

La fórmula para obtener el capital final sería Cf = C0 * (( 1 + i) ^ t) siendo C0 el capital inicial, i el tipo de interés y t el tiempo. Ahora supongamo, como en el ejemplo de la capitalización simple, que tenemos una tabla llamada Depositos con una columna Capital donde almacenamos el dato del capital inicial, que para el ejemplo serán 2000 euros (C0=2000), una columna Interes con el tipo de interés, que para el ejmplo será del 5% anual (i=0.05) y una columna Tiempo que será de 10 años.

Entonces ¿cómo nos quedaría la consulta?

Select CONVERT(float,Importe)*POWER(CONVERT(float,(1.00+Interes)),Tiempo) from Depositos

¿Por qué metí ahí las funciones CONVERT() para asegurarme de que los valores con los que se operan son float? Bueno, en el caso del importe porque ya sabéis, como comentamos anteriormente, que SQL-Server 2008 (también os comenté que estoy estudiando las versiones posteriores) convierte a enteros los resultados de las operaciones si operamos con algún entero en las mismas. En el caso del segundo es por el funcionamiento de la función POWER(). Dicha función recibe dos parámetros y devuelve el valor del primer parámetro elevado al valor del segundo parámetro, pero el tipo de dato devuelto es siempre el mismo tipo que el enviado en el primer parámetro. Si, por ejemplo, recibe un valor Numeric(4,2) redondearía el resultado a dos decimales y nos daría un resultado bastante impreciso por ello.

SQL-Server y Capitalización simple:calcular los intereses y el capital final

La capitalización simple es una fórmula financiera que permite calcular el equivalente de un capital en un momento posterior. Se utiliza generalmente en depósitos o préstamos a corto plazo.

Partiendo de un capital (aquí será C0) del que se dispone inicialmente, se determinará la cuantía final que se recuperará en el futuro sabidas las condiciones en las que la operación se contrata (tiempo –t– y tipo de interés –i-).

La fórmula para calcular los intereses sería la siguiente: I = C0 * i * t. Es decir, los intereses son el Capital multiplicado por el tipo de interés y el tiempo.

Ahora supongamos que tenemos una tabla Cuentas donde guardamos el capital inicial y las condiciones. Supongamos que tenemos un capital inicial de 1000 euros (C0=1000) guardado en el campo Capital, a un interés del 10% anual (i=0.1) almacenadado en el campo Interes y por un año (t=1) almacenado en el campo Tiempo:

Select Capital*Interes*Tiempo as InteresAnual from Cuentas

El resultado de la consulta de arriba debería ser de 100 euros.

Ahora, usando los mismos datos del ejemplo de arriba ¿Cómo sabríamos cual es el capital final? Una opción es calcular el interés y sumarlo al capital inicial, otro es aplicar la fórmula CapitalFinal = C0 * (1 + (i * t)). La consulta sería así:

#Así multiplicando
Select Capital*(1.00+(Interes*Tiempo)) as CapitalFinal from Cuentas

Recuerda que SQL-Server, al menos en la versión 2008 (estoy actualizándome ahora a 2017, con mucho por leer), convierte siempre a entero si utilizas enteros en la operación, por eso que puse el uno seguido de decimales en la segunda consulta. Recuérdalo también a la hora de almacenar los datos y de operar con ellos.

Otro punto importante: el tipo de interés y el plazo deben referirse a la misma medida temporal. Es decir: si el tipo es anual el plazo debe de ir en años, pero si el tipo es mensual el plazo irá en meses. Por ejemplo, ¿con los datos de antes cómo se calcularía el interés generado en cinco meses?

Select Capital*(Interes/12.00)*5.00 as InteresMeses from Cuentas

Dividimos el interés anual entre 12 para obtener el interés mensual y multiplicamos por 5 para obtener el resultado deseado.

O que é a Tríade CID?

Esta é uma tradução ao português dum artigo antigo. Cá uma ligação ao orixinal.

A Tríade CID não tem relação com poemas medievais castelhanos nem com as bandas desenhadas do Hernández Palacios, mas é um conceito da cibersegurança que faz ênfase em três princípios que têm de trabalhar em conjunto para garantir a segurança de um sistema informático: Confidencialidade, Integridade e Disponibilidade.

 

  1. Confidencialidade: Os dados têm de estar só na mão dos utentes autorizados. Umas políticas de controlo do acesso têm de ser aplicadas para evitar que a informação classificada cair em mãos, seja ou não de forma intencionada, de utentes sem acesso.
  2. Integridade: O conceito integridade faz referência  a que os dados que temos armazenados sejam corretos e completos. Tem de se poder garantizar que os dados não foram mudados de forma não autorizada, que não é possível a perda destes dados é que os mesmos são consistentes, isto é que a informação é mesmo correcta à que temos no mundo exterior.
  3. Disponibilidade: Afinal, o conceito disponibilidade implica que a informação tem de estar acessível sempre para os utentes autorizados num tempo razoável. Isto é que os dados têm de estar sempre disponíveis para os utentes.

Na altura de desenhar uma estratégia de cibersegurança para uma empresa ou simplesmente na altura de armazenar qualquer coleção de dados confidenciais um deve considerar que estes três pontos têm de ser atingidos.  

¿Qué es la “Tríada CID” o el “Triángulo de la Seguridad”?

La Tríada CID no tiene que ver con cantares escritos en castellano medieval ni con tebeos de Hernández Palacios, sino que es un concepto de ciberseguridad que hace referencia a tres principios que deben trabajar en conjunto para garantizar la seguridad de un sistema informático: Confidencialidad, Integridad y Disponibilidad.

  • Confidencialidad: Los datos deben estar solo al alcance de los usuarios autorizados. Deben establecerse unas políticas de control de acceso para evitar que la información clasificada caiga en manos, ya sea de forma intencional o no, de un usuario sin acceso.
  • Integridad: El concepto integridad hace referencia a la correctitud y completitud de la informacion que tenemos almacenada. Debe poder garantizarse que no se realizan modificaciones de los datos no autorizadas, que no es posible la pérdida de datos y que los datos son consistentes, esto es que la información que tenemos almacenada es correcta respecto al mundo real exterior.
  • Disponibilidad: Finalmente, el concepto disponibilidad implica que la información tiene que ser accesible para los usuarios autorizados dentro de un tiempo razonable. Dicho de otra forma: la información debe estar siempre disponible para el usuario autorizado.

A la hora de diseñar una estrategia de seguridad informática para una empresa, o simplemente a la hora de almancenar cualquier colección de datos sensibles, estos tres puntos deben tenerse siempre en consideración.

Seguir leyendo “¿Qué es la “Tríada CID” o el “Triángulo de la Seguridad”?”

Instalar Microsoft ODBC 17 para SQL-Server en Ubuntu 17.10

Una entrada rápida ¿Cómo se instala el driver ODBC 17 para SQL-Server de Microsoft en un equipo con Ubuntu? No es algo muy habitual usar SQL-Server en Linux, pero por si os interes la cosa va así:

sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

#PARA OTRA VERSIÓN
#CAMBIA EL 17.10 DE LA URL
#POR LO QUE CORRESPONDA
curl https://packages.microsoft.com/config/ubuntu/17.10/prod.list > /etc/apt/sources.list.d/mssql-release.list

exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql
# LO SIGUIENTE ES PARA LOS COMANDOS bcp Y sqlcmd
# ES OPCIONAL PERO MUY RECOMENDABLE
sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# PARA LOS ENCABEZADOS unixODBC
# ES OPCIONAL, PERO DE NUEVO RECOMENDABLE
sudo apt-get install unixodbc-dev

Trabajar con porcentajes en SQL-Server: evitar conversión a entero.

Me animo a hacer esta entrada porque habla sobre algo simple pero que por un detalle me rompió la cabeza.

Vamos con el caso/ejemplo, tenemos una tabla Precios con tres columnas: descripción, precio y descuento. La primera es de tipo varchar, la segunda del tipo money y la tercera del tipo numeric, ya que almacena el porcentaje que descontamos sobre el precio. En la consulta queremos sacar esos tres campos y un cuarto campo calculado, el importe con el descuento aplicado. Parece que bastaría con una consulta así:

Select 
  Descripcion,
  Precio,
  Descuento
  Precio * (1-Descuento/100) as ImporteConDescuento
from
  Precios

Y ya estaría, ya tenemos nuestro importe con descuento… Pero ejecutas la consulta y ves algo raro ¿los decimales? ¿dónde están? Se está redondeando el cálculo para que devuelva un valor entero. ¿Por qué? Porque al haber operado con dos enteros en el cálculo del porcentaje el motor que realiza la consulta ha convertido el resultado a entero. Sí, así es, si operas con enteros hace una conversión a ese tipo (al menos SQL-Server 2008). Para obtener el resultado correcto tendrías que hacer así la consulta:

Select 
  Descripcion,
  Precio,
  Descuento
  Precio * (1.00-Descuento/100.00) as ImporteConDescuento
from
  Precios

Así que acuérdate de los tipos cuando uses una constante en una operación: si el resultado tiene que ser decimal usa decimales.