MySQL : Cómo se hace en SQL Server?

Pues me di cuenta que hice una entrada sobre Cómo migrar data pero es evidente que no sólo se migra la data, si no también un sin número de queries, código SQL y sentencias que están marcadas y ancladas a MySQL y su sintaxis.

Aquí pretendo presentar los escenarios que hasta ahora he experimentado y de los cuales he tenido que buscar, leer, revisar, probar, buscar, leer.

[UNIX_TIMESTAMP]

Esa función de MySql que nos retorna el tiempo en formato Unix… es una de las más sencillas y se puede reemplazar/solucionar creando una función en SQL Server con el mismo nombre:

CREATE FUNCTION [dbo].[UNIX_TIMESTAMP] (
@time datetime
)
RETURNS integer
AS 
BEGIN

  declare @return integer

  SELECT @return = DATEDIFF(SECOND,{d '1970-01-01'}, @time)

  return @return
END

 

[RECLACE INTO]

Oh San Cristóbal… eso no sale tan fácil al inicio, pero después te acostumbras al… MERGE. Con esta sentencia nos libramos la ardua tarea de estar comparando datos para luego mediante líneas de código condicionales determinar si algo cumple, no cumple, cumple a medias, etc.

El MERGE es una sentencia introducida en SQL Server 2008 y que se traduce como Unión. Contiene la sintaxis básica siguiente:

MERGE     [ destino ]     
USING <tabla_origen, fuente_datos, query>     
ON <condicion_union>     
WHEN MATCHED [ AND condicion_adicional ]         
THEN [ –-lógica si coincide ]     
WHEN NOT MATCHED  BY TARGET  [ AND condicion_adicional ]         
THEN [ –-lógica si no coincide ]     OUTPUT <opciones_salida> ;

 

En comparación con la que brinda Microsoft MSDN la notarán muy simplificada: la he resumida a los fines más comunes y utilizados.

Vamos a describirla:

  • La sección [ destino ] hace referencia a una tabla quién será la altera y/o modificada.
  • ON, define la(s) condición(es) que se debe(n) cumplir para crear dicha unión. En su mayoría, es un ID relacional.
  • WHEN MATCHED, indica el punto de proceso que se ejecuta en caso de que la condición de unión sea satisfactoria. También se puede agregar una condición adicional con fines de ser más específico.
  • THEN, nos indica qué hará en caso de que la(s) búsqueda(s) coincida(n). Inicia con el tipo de acción (INSERT, UPDATE, DELETE) precedido de su cuerpo.
  • WHEN NOT MATCHED lo deja bien claro: qué hará cuando no coincidan los criterios. Por igual con una búsqueda adicional.
  • THEN, lo mismo que el anterior con su respectiva acción.
  • OUTPUT es la cláusula para manejar la visualización del proceso, los registros afectados, las acciones efectuadas. Aquí pueden usar el indicador ‘$action’ para saber qué acción fue la realizada. Al igual que como en los triggers contarán con tablas que hacen referencia a la acción como es INSERTED.

 

A continuación un script conteniendo los tópicos hablados:

MERGE dbo.prueba_copia  as target
USING dbo.prueba        as source
ON target.id_auto       = source.id_auto
WHEN MATCHED THEN    
UPDATE     
SET target.id_test = source.id_test,
    target.id_status_test = source.id_status_test,
    target.fecha_ejecucion_estimada = dbo.UNIX_TIMESTAMP(1357577675),
    target.comentarios = '',
    target.cantidad_ejecuciones = 1, 
target.last_input_date = 1357577675 
WHEN NOT MATCHED BY TARGET THEN
INSERT (id_test, id_status_test, dia_logico,fecha_ejecucion_sistema, comentarios,cantidad_ejecuciones, last_input_date  ) values
(source.id_test, source.id_status_test, dbo.UNIX_TIMESTAMP(DateAdd(ss, 1357577675, '1970-01-01')),'', 1,  1357577675 )  
OUTPUT $action, inserted.id_auto As insertedId_auto;

 

Anuncios

2 comentarios en “MySQL : Cómo se hace en SQL Server?

  1. Enmanuel dijo:

    ¿Y si quiero hacer esto desde aql server contra MySql?, es decir, lo que me gustaría hacer es un script que se ejecute cada cierto tiempo en sql server. Cuando se ejecute quiero que coja datos de una BD en sql server y los deposite en una MysSql. No se si es posible…

    • Emmanuel,

      Sí se puede recibir y enviar data mediante gestores pero no creo que llegue al punto de realizarse entre diferentes gestores/motores. Te doy un par de alternativas:
      1.- Desde SQL Server puedes cada X tiempo generar un archivo con la data. En MySQL creas un evento que cuando se dispare lea el archivo ya creado e ingrese los datos.
      2.- (y para mi más fácil) Obvia, pero efectiva es que en jna simple aplicación de consola puedes manejar todo este proceso tomándote menos de una hora para programar.

      No estoy muy informado, pero me parece que existe una tosca pero utilizando software propietario así que si no es un tema laboral, se pone delgada la linea de esperanzas.

¿Quieres agregar algo?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s