A pesar de que este blog se refiere al mundo de las bases de datos, en este momento le ofrecemos este pequeño espacio al mundo del posicionamiento web, que en este momento se encuentra revolucionado por un concurso llamado Seoveinte.

9/5/2014

Sql Server desde Android

Con el boom de los  dispositivos móviles se ha vuelto algo muy necesario poder acceder a las aplicaciones de trabajo desde los smartphones y SQL SERVER no es una excepción, para la gente vinculada a las bases de datos.

Al ser Android un sistema operativo libre creado por Google, quien logró posicionarse como el gran competidor de Microsoft, la compatibilidad entre productos de estas empresas es notablemente dificultosa.

Cómo podemos contectarno desde un dispositivo con Android a una base SQL SERVER.
La primer opción lógica que se nos aparece en la cabeza es usar un webservice que devuelva lo que necesitamos sin necesidad de tirar queries.
La segunda opción es usar algún software similar al sql server management studio. Últimamente han aparecido en la play store de google algunos softwares que cumplen de manera acotada algunas funciones básicas, entre ellos encontramos al SQL Studio Lite que es gratuito y funciona bastante bien, aunque hay muchas personas que se quejan por diferentes fallas.

Lamentablemente no hay muchas más opciones, por ahora, pero estamos seguros que en poco tiempo irán apareciendo mejores aplicaciones que cumplan con esta función y quizás hasta Microsoft ofrezca de una vez por toda una forma de acceder desde Android.

Si sabes de alguna forma fiable y estable de acceder al SQL desde tu android, contanos y lo compartimos con todos los lectores del blog ;)


16/6/2013

T-SQL y la lógica ternaria o trivalor

Cuando una persona empieza a programar con el lenguaje SQL, comienza con la selección de datos usando SELECT. Luego filtra los resultados usando WHERE, y en primera instancia esto parece una tarea fácil y trivial. Pero cuando empezamos a trabajar más con SQL nos chocamos con aspectos no tan obvios, cómo el manejo de NULL.

Supongamos que tenemos los siguientes datos

CREATE TABLE Ternaria
(
    Id INT Identity(1,1) NOT NULL
    ,Nombre VARCHAR(255) NOT NULL
    ,Pais VARCHAR(255) NOT NULL
    ,Ciudad VARCHAR(255) NULL
)

INSERT INTO Ternaria
  (
    Nombre
    ,Pais
    ,Ciudad
  )
VALUES
  (
    'Leo'
    ,'Argentina'
    ,'San Isidro'
  )
  ,(
    'Juan'
    ,'Argentina'
    ,'Olivos'
  )
  ,(
    'Pedro'
    ,'Argentina'
    ,'Ciudadela'
   )
  ,(
    'Matias'
    ,'Brasil'
    ,NULL
  )
  ,(
    'Marcos'
    ,'Brasil'
    ,'Rio de Janeiro'
  )

El resultado de una consulta de selección sin filtros es el siguiente:

SELECT
    Id
    ,Nombre
    ,Pais
    ,Ciudad
FROM
    Ternaria

ID NOMBRE PAIS CIUDAD
1 Leo Argentina San Isidro
2 Juan Argentina Olivos
3 Pedro Argentina Ciudadela
4 Matias Brasil (null)
5 Marcos Brasil Rio de Janeiro

Veamos dos ejemplos para entender la lógica ternaria:
Primero filtramos por el campo Pais, obteniendo lo siguiente:

SELECT
    Id
    ,Nombre
    ,Pais
    ,Ciudad
FROM
    Ternaria
WHERE
    Pais = 'Argentina'

IDNOMBREPAISCIUDAD
1LeoArgentinaSan Isidro
2JuanArgentinaOlivos
3PedroArgentinaCiudadela

Segundo filtramos por el campo ciudad, obteniendo lo siguiente:

SELECT
    Id
    ,Nombre
    ,Pais
    ,Ciudad
FROM
    Ternaria
WHERE
    Ciudad <> 'Rio de Janeiro'
    AND Pais = 'Brasil'

IDNOMBREPAISCIUDAD

Si prestamos atención, esta segunda query genera un resultado erróneo, ya que si existe en la tabla, aunque sea, un registro que cumpla con la condición de que el Pais sea Brasil y la ciudad sea distinta a Rio de Janeiro.

Ahora bien, si existe aunque sea un registro, porqué no se muestra?

Aquí es donde aparece la lógica basada en tres valores. Si comparamos dos valores iguales obtenemos Verdadero (True), si comparamos dos valores distintos obtenemos Falso (False), pero si comparamos un valor con un Null, obtenemos Desconocido (Unknown) y este último valor obtenido no es ni Verdadero ni Falso, por ende se excluye en las comparaciones.

Observación: Ni siquiera la comparación entre Nulls es Verdadera o Falsa, sino Desconocido.

Podemos solucionar este inconveniente de la siguiente manera:

SELECT
    Id
    ,Nombre
    ,Pais
    ,Ciudad
FROM
    Ternaria
WHERE
    (Ciudad <> 'Rio de Janeiro' OR Ciudad IS NULL)
    AND Pais = 'Brasil'

IDNOMBREPAISCIUDAD
4MatiasBrasil(null)