En este post voy a hablar sobre las nuevas funciones de conversión. En esta nueva versión han metido las funciones Parse(), Try_Parse() y Try_Convert() muy parecidas a las que ya tenemos en .net aunque con algunas limitaciones como vamos a ver ahora.
Sin más, vamos a meternos de lleno en ellas:
Parse(). Esta función nos convierte un string a un tipo válido y una cultura opcional. Si el valor pasado no es posible convertirlo o del tipo que se ha especificado (solo numéricos y de fecha y horas) devolverá una excepción. Veamos unos ejemplos:
Conversión de números:
Fechas. Como podéis ver, si queremos pasarlo a alguna cultura deberemos usar la palabra reservada USING:

Resultado:

Conversión a un tipo no válido

Resultados:

Try_Parse(). Esta función es similar a la anterior con diferencia de que en caso de que no se pueda convertir al tipo especificado nos devolverá un null en vez de una excepción.
Try_Convert(). Esta función nos va a convertir (con CAST) un valor pasado a un tipo válido. Además podemos aplicar algún estilo como los que nos da la función Convert. Si el tipo no es válido nos dará una excepción. Veamos unos ejemplos
Conversión de un número.
Conversión con truncado. Si usamos algún tipo de datos tipo string y los caracteres se pasan de los especificado este nos retorna automáticamente un truncado.
Conversiones con estilo.
Y con esto, damos por finalizado las conversiones con estas funciones, espero que os sea de utilidad
.
Un Saludo
Seguimos con más novedades en SQL Server 2012. Hoy voy a explicar las nuevas funciones Format() y Concat() que nos servirán para formatear y concatenar respectivamente.
Format(). Esta función nos devuelve un valor numérico o de fecha formateado con una cultura opcional. Vamos a ver unos cuantos ejemplos para ver los resultados.
1er Ejemplo. En este primero ejemplo vamos a devolver un tipo float a moneda para diferentes culturas.

El resultado es el siguiente:

2º Ejemplo. Para este ejemplo devolveremos el día de la semana de una cultura en concreto.

El resultado es el siguiente:

3er Ejemplo. En este ejemplo devolveremos una fecha en el formato especificado
Como veis, podéis dar varios formatos a un tipo numérico o de fecha fácilmente con la función Format(). Tenéis más información acerca del formato en esta url: http://msdn.microsoft.com/library/26etazsy.aspx
Ahora, vamos con la segunda función: Concat() que nos va permitir montar una cadena a partir de varios tipos de datos como vamos a ver ahora:
En este ejemplo vamos a concatenar un texto con un tipo fecha

El resultado:

En este otro ejemplo vamos a ver como podemos unir concat y format para crear frases:

Y el resultado:

En este último ejemplo vamos a ver otra cadena constituida por un texto y un tipo de datos numérico para ver como la función no le va a importar la diferencia entre los tipos (al igual que en el primer ejemplo) y nos devuelve igualmente una cadena:
Y con esto terminamos este post sobre Concat() y Format(). Espero que sea de vuestro interés
.
Un Saludo
Continuando con la serie de novedades, esta vez le toca a las nuevas funciones Lógicas introducidas en esta nueva versión. Estas son IIF y Choose y nos van a ayudar a con la construcción de nuestras T-SQL. Aquí un unos ejemplos:
IIF(). Esta función funciona igual que el visual basic y nos va a permitir a través de una evaluación de condiciones la elección de un valor verdadero o falso. Vemos un ejemplo a continuación:
Select IIF(DatePart(month,GetDate()) = 5 , 'True','False')

Choose(). Esta función nos va a permitir seleccionar de una lista de valores lo que le pasemos como index en el primer valor.
Set Datefirst 1
Select Choose(datepart(DW,GetDate()),'Lunes','Martes','Miércoles', 'Jueves',
'Viernes', 'Sábado','Domingo')

Espero que sea de vuestro interés,
Un Saludo
Con la reciente salida de SQL Server 2012, han llegado con muchas novedades que destacar y que seguro nos van a ayudar con nuestro día a día. Hoy voy a mostrar las nuevas funciones de fecha y hora que vienen.
Concretamente son 7 estas funciones, que van orientadas la creación de fechas a partir de la introducción de valores (exceptuando la última). Veamos un ejemplo por cada una de ellas para tener más claro su funcionamiento:
DATEFROMPARTS. Devuelve un tipo de datos Date al pasarle el año, mes y día.
1: Select DATEFROMPARTS(2012,03,29) AS Fecha

DATETIME2FROMPARTS. Devuelve un tipo de datos Datetime2 al pasarle el año, mes, día, horas, minutos, segundos, milisegundos y precisión.
1: Select DATETIME2FROMPARTS(2012,03,29,23,26,00,345,4)

DATETIMEFROMPARTS. Esta función es idéntica a la anterior con la diferencia de que esta última devuelve un valor de tipo Datetime.
1: Select DATETIMEFROMPARTS(2012,03,01,23,50,0,010)

DATETIMEOFFSETFROMPARTS. Devuelve un tipo de datos Datetimeoffset al pasarle a esta función la fecha, la hora, fracciones, hour_offset, minute_offset y la precisión. El formato que obtendremos de la ejecución de esta función será:
1: Select DATETIMEFROMPARTS(2012,03,01,23,50,0,010)

SMALLDATETIMEFROMPARTS. Devuelve un tipo de dato smalldatetime pasando la fecha, horas, minutos y segundos.
1: Select SMALLDATETIMEFROMPARTS(2012,02,01,12,59)

TIMEFROMPARTS. Devuelve un tipo Time al pasarle la hora, la fracción y la precisión.
1: Select SMALLDATETIMEFROMPARTS(2012,02,01,12,59)

EOMONTH. Esta función nos va a venir muy a más de uno seguro
, ya que devuelve el último día del mes de la fecha que introduzcamos. La síntasis es la siguiente: EOMONTH(Fecha, Mes)
-- Mes actual
Select EOMONTH(GetDate())
-- Mes anterior
Select EOMONTH(GetDate(),-1)
-- Mes siguiente
Select EOMONTH(GetDate(),1)
|
 |
Nota con las fracciones y la precisión. Si pasáis una fracción mayor a la que establezcáis en la precisión os va dar un error como el siguiente:

Y con esto, terminamos las funciones de fecha y hora pero no con el resto de funciones
.
Espero que os sea de interés,
Un Saludo!
Desde hace casi ya un mes tenemos disponibles una serie de customs reports que nos va a ayudar a ver la actividad de nuestro servidor. Muy orientados a ver cuellos de botella en nuestro SQL Server, estos reports podrán ayudarnos a resolver entre otros lo siguiente:
- Cuellos de botella en CPU (que queries nos están consumiendo más CPU)
- Cuellos de Boterlla para IO (que queries usan más IO)
- Recomendaciones de índices generados por el propio optimizador de consultas (índices que faltan por ejemplo)
- Bloqueos
- Latch contention
Todos estos Reports no hacen más que mostrarnos la información que ya podemos obtener nosotros mismos desde las SQL Server Dynamic Management Views.
No es necesaria la instalación de SQL Server Reporting Services para poder ver los Reports.
Podemos descargarlos desde aquí: http://www.microsoft.com/en-us/download/details.aspx?id=29063 y una vez terminada la descarga, ejecutamos el .msi y seguimos el asistente que nos instalará los reports.
Podemos elegir la ubicación que por defecto nos lo deja en: <drive>:\Program Files\Microsoft SQL Server\110\Tools\Performance Dashboard\
Una vez instalado el paquete, nos vamos al a carpeta donde nos ha colocado los informes y buscamos el script setup.sql y lo ejecutamos.
Una vez ejecutado tan solo tenemos que abrir el Microsoft SQL Server Management Studio y hacer botón derecho en el nodo principal.
Seleccionamos Reports y luego Custom Reports para buscar los reports que ya hemos descargado y que se encontrarán en la ruta que le hayamos indicado o la que trae por defecto (más arriba podéis verla). Abrimos el que viene con el nombre performance_dashboard_main.rdl y listo. Podremos ver algo como lo siguiente:

Por último, si quieres ver que se cuece bajo estos reports, tan solo tienes que abrirlos en un proyecto de Reporting Services
.
Espero que os sea de interés.
Saludos!
El próximo martes 8 de mayo, Second Nug os invita a sacar vuestros desarrollos .NET por la ventana de Windows, para conocer las posibilidades que nos ofrece el proyecto Mono a la hora de explorar otras plataformas: Mac y Linux.
Conoce el proyecto Mono, aprende a crear aplicaciones portables con tus conocimientos en .NET y a crear un entorno de desarrollo adecuado a tal efecto. Por un rato en SNUG hacemos una excursión fuera de nuestro querido Windows, de la mano del mejor guía para la ocasión, Lluis Sánchez miembro del equipo de desarrollo del propio proyecto Mono desde hace 10 años.
Url Registro: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032511982&Culture=es-ES

Además, todos los eventos anteriores de este año así como sus materiales están aquí disponibles:
- Eventos Desarrollo
Y dispones de nuestro Histórico de Eventos, con los eventos desde 2008 a 2011:
Esperamos veros allí 
Un Saludo
Este caso que voy a explicar lo he utilizado con Oracle pero también os puede servir para obtener los datos desde una base de datos no SQL Server, y digo ‘no SQL Server’ porque para este es más fácil hacerlo sin liarla tanto
.
Vamos a exponer el escenario para que entendamos bien que es lo que quiero hacer:
La idea es la extracción de datos desde Oracle de una determinada fecha en adelante y/o los datos que cambiaron en la tabla de la que traigo los datos.
¿Cómo lo traigo? Pues me pillo un componente Data Flow Task y dentro de este uso un OLE DB Source al que conectarme (el resto hasta el destino según vuestras necesidades).
Primer intento. En el OLE DB Source elijo la conexión a Oracle en Data access mode selecciono SQL Command y escribo la siguiente sentencia:
Select [MisCampos] From MiTabla Where Fecha_Registro >= ?
Si el origen fuese un SQL Server ahora podría seleccionar parameters y asignar alguna variable que tuviese por ahí y listo, pero como es una fuente diferente no puede ser así.
Solución:
- Creamos dos variables, una que contenga el SQL (de tipo string) y la otra la fecha.
- Para la variable que contendrá el SQL no situamos en el panel de variables y pulsamos F4 para pasar a las propiedades de esta y cambiamos la propiedad EvaluateAsExpression a true. En la propiedad Expression montamos la siguiente consulta:
“Select [MisCampos] From MiTabla Where Fecha_Registro” + @[User:MiVariableFecha]
- En el OLE DB Source seleccionamos el origen de datos, en data access mode seleccionamos sql command from variable y a continuación seleccionamos la variable sql (o como la llamemos).
Con esto estaría todo listo en la práctica, pero hay algunas consideraciones a tener en cuenta y que te pueden dar algún quebradero de cabeza.
- Si la variable SQL que tenemos hay parámetros, hay que tener en cuenta que si la/s variable/s son diferentes a string tendrás que hacer una conversión sino no te funcionará y al probar la expresión te producirá una excepción.
- Si ya tienes montada la estructura desde el origen al destino, con conversiones, splits, merges y todo lo necesario para extraer tus datos directamente de una tabla sin parámetros y ahora quieres hacerlo de esta forma te puede pasar que el componente se quede ‘pillado’ y te de errores raros.
- Solución 1. Lo montas de nuevo todo
- Solución 2. Puedes probar a refrescar la variable quitando o agregando campos para ver si refresca.
- Si tienes más transformaciones entre el origen y el destino, tendrás que abrir las que te aparezcan con errores y mapear los campos (suponiendo que en la variable que has creado nueva venga con los mismos nombres y no diferentes) o en su defecto quitar y ponerlos de nuevo.
Igual hay algún caso que se me escape o que no me haya pasado, así es que si quieres comentarlo adelante
!!
Un Saludo
El próximo martes 10 de Abril veremos en Second Nug como las cachés son uno de los múltiples recursos con los que con cuentan los desarrolladores para poder mejorar el rendimiento de las aplicaciones. Conocerlas, saber cuándo utilizarlas y elegir la más adecuada para cada situación es un factor clave en todo desarrollo de software.
El objetivo de este sesión será realizar una visión lo más práctica posible a las diferentes tipos de caché con los que se pueden contar, entrando en detalles de diseño para indicar los casos en que su uso podría ser beneficioso.
Para lo cual tendremos a Ibon Landa, Software Development Team Lead en Plain Concepts y MVP de Windows Azure, que nos introducirá a este interesante y útil mundo del uso de la caché.
Url Registro: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032507055&Culture=es-AR

Además, todos los eventos anteriores de este año así como sus materiales están aquí disponibles:
- Eventos Desarrollo
Y dispones de nuestro Histórico de Eventos, con los eventos desde 2008 a 2011:
Esperamos veros allí 
Un Saludo
Una de las características muy interesante de los controles de Reporting Services es la propiedad action, en ella (como ya he escrito en algún otro artículo) podemos indicarle que acción queremos realizar cuando el usuario pulsa sobre este.
Una de ellas es la de ir a una url, que no solo acepta url sino también javascript. Después de estar dándole vueltas a un informe que navegaba por niveles con muchos parámetros seleccionables, se me ocurrió que lo ideal para varios de ellos sería un volver hacia atrás.
Para ello buscando que javascript podía ayudarme con ello encontré el siguiente: ="BLOCKED SCRIPThistory.back(1)".
Este Javascript básicamente hace lo que quiero, la función de ir atrás del navegador, así es que problema resuelto.
Espero que se de vuestro interés,
Un Saludo
Hace un tiempo escribí un artículo sobre como crear un pop-up desde la propiedad Action que llevan los controles en Reporting Services. Para este ejemplo se quería lanzar una ventana cuando se pulsase sobre el valor.
Si nos fijamos bien, vamos construyendo la url y hay una sección para añadir parámetros que funciona tal que así: &Parametro=ValorDelParametro. Hasta ahí bien, ¿pero que pasa si es un parámetro multivalue? Pues que tendremos que ponerlo de la siguiente forma: &Parametro=ValorDelParametro1 […] &Parametro=ValorDelParametroN
Como no sabemos cuantos parámetros vienen del filtro o que parámetros va a ha seleccionar el usuario, esto lo tenemos que hacer dinámicamente. Para ello nos valdremos de la función Join(“Conjunto de datos”, “Delimintador”).
Nos quedaría lo siguiente: “&MiParametro=” Join(Parameters!MiParametro.Value,”&MiParametro=”) y con esto tendremos el siguiente trozo de la url.
Espero que os sea de utilidad.
Un Saludo

Con la nueva salida de SQL Server hace unos días en su versión RTM vienen nuevas certificaciones con él. La información es la siguiente:
- Hay dos nuevos roles o niveles: Data Platform certification (DP) y Business Intelligence certification (BI).
- El anterior database developer y database administrator son unidos dentro de Data Platform certification
- Para obtener una certificación hay que pasar correctamente 5 exámenes.
- Dichas certificaciones estarán disponibles en Junio de 2012
- Para actualizarse a las nuevas certificaciones tan solo tendremos que pasar 3 exámenes (tendremos más información a partir de mediados de abril)
- Cada nivel o rol de certificación deberá de ser actualizado (volver a presentarse) cada 3 años. Más información aquí: http://www.microsoft.com/learning/en/us/certification/exam-prep.aspx# Esto significa que en nuestros títulos de certificación no irá el número de versión debido a esta re-certificación.
- Hay una nueva serie de libros llamados de referencia del examen, que se asignan directamente a los objetivos en el examen. Algunos exámenes tendrán kits de capacitación y otros tendrán referencias de exámenes
Los 7 exámenes que tendrá SQL Server 2012 serán los siguientes:
- Querying Microsoft SQL Server 2012 (70-461) [BI and DP] (info) (course)
- Administering Microsoft SQL Server 2012 Databases (70-462) [BI and DP] (info) (course)
- Implementing a Data Warehouse with Microsoft SQL Server 2012 (70-463) [BI and DP] (info) (course)
- Developing Microsoft SQL Server 2012 Databases (70-464) [DP] (info) (course)
- Designing Database Solutions for Microsoft SQL Server 2012 (70-465) [DP] (info)
- Implementing Data Models and Reports with Microsoft SQL Server 2012 (70-466) [BI] (info) (course)
- Designing Business Intelligence Solutions with Microsoft SQL Server 2012 (70-467) [BI] (info)
Cada examen que hagas tendrás que indicar si quieres que sea de BI o DP.
Más info:
Learning resources from Microsoft
Frequently Asked Questions
Referencia: http://www.jamesserra.com/archive/2012/03/sql-server-2012-new-certification-info/
Un Saludo
Buenas, cuando estamos trabajando con gráficas en Reporting Services es importante tener claro que el usuario tiene que ver la información muy clara. Estando montando una gráfica de tipo shape resulta que cuando los valores son muy pequeños frente a uno muy grande, se juntan todos y no se aprecia el valor que se está pintando.

Pues bien para mejorar esta visualización nos situamos en la gráfica, y en las propiedades de chart series buscamos CustomAttributes y expandimos para ver el conjunto de propiedades que tiene este para cambiar el valor de PieLabelSytle a Outside
Con esto nuestra gráfica mostrará los valores fuera de esta con una rayita tal como podemos ver en la siguiente imagen:

Espero que se a de vuestro interés,
Un Saludo
En Febrero pudimos disfrutar de un evento dedicado a XML (eXtensible Markup Language) que se nos quedó corto de tiempo, por eso el próximo martes 20 de Marzo Second Nug tratará los conceptos de XML que no dio tiempo a tocar.
Para este segundo evento se quedaron muchos temas interesantes de los que hablar: transformaciones XML con XSLT, ADO.NET y XML, serialización, SOAP y WSDL, XML Web Services, XML en Sql Server, y como no, Linq para XML.
No te pierdas este evento de Javier Alia, Senior Consultant en Avanade con una larga experiencia trabajando en proyectos de integración y con distintas versiones de Biztalk.
Url Registro: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032506426&Culture=es-ES

Además, todos los eventos anteriores de este año así como sus materiales están aqui disponibles:
- Eventos Desarrollo
Y dispones de nuestro Histórico de Eventos, con los eventos desde 2008 a 2011:
Esperamos veros allí 
Un Saludo
El próximo martes 6 de marzo, en Second Nug te ayudamos a descubrir una forma en que la aplicación puede contarte sus problemas.
System.Diagnostics es un namespace vital en .NET que a menudo es desconocido por los desarrolladores. En este espacio de nombre encontramos todo lo necesario para hacer que nuestra aplicación nos hable sobre su estado de salud. Incluye y nos permite usar mecanismos que nos ayuden a saber qué está ocurriendo en nuestra aplicación cuando las cosas no van tan bien.
Conocer Diagnostics es una manera de incorporar el concepto de “design for operations” a nuestras aplicaciones sin necesidad de utilizar librerías ajenas al Framework de .NET. No te pierdas este evento de Rodrigo Corral, MVP de Visual Studio ALM, y ALM Team Lead and Software Architect en Plain Concepts.
UrlRegistro: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032504839&Culture=es-AR

Además, todos los eventos anteriores de este año así como sus materiales están aqui disponibles:
- Eventos Desarrollo
Y dispones de nuestro Histórico de Eventos, con los eventos desde 2008 a 2011:
Esperamos veros allí 
Un Saludo

Pues bien, esto se soluciona muy fácilmente
. Con tan solo activar la vista de compatibilidad de IE9 tendremos solucionado “el problema”.
Para hacer esto, tan solo os tenéis que ir al menú tools de IE9 y activar Compatibility View y listo
Un Saludo
Estos días he estado liado con una tarea de Integration Services (SSIS) que entre otras cosas, en uno de sus flujos necesitaba comprimir unaarchivo antes de enviarlo via mail (por eso de que pese menos
).
De entre todas las opciones disponibles al final me quedé con esta por práctica y por tiempo, pero hay algunas más, como crearte tu propio componente que lo haga o hacerlo con script.
Para realizar dicha tarea necesité el componente Execute Process Task Editor que trae BIDS para los proyectos de SSIS.
Para configurarlo tendremos que rellenar las siguientes propiedades:
Pestaña General. Aquí un nombre y una descripción de lo que hacemos será suficiente (es opcional)
Pestaña Process. De esta ventana me quedo con tres propiedades principales:
- Executable. Ruta del archivo que vamos a utilizar para comprimir.
- Arguments. Aquí le indicaremos los argumentos que necesitamos para que se ejecute la herramienta a utilizar (en este caso Winrar) correctamente.
- WindowsStyle. De esta propiedad use hidden para ocultar la ventana ms-dos que genera la aplicación mientras se comprime el archivo.
La pestaña expressions no me hizo falta para este ejemplo.
Sobre winrar, decir que la ruta para la propiedad Executable suele estar en Program Files\Winrar\Rar.exe (unrar.exe descomprime). En Arguments escribimos lo siguiente:
a –ep m5 “rutaDestino\archivo.zip” “RutaDondeEstanTusArchivos”
El comando a nos indica que vamos a comprimir, el –ep nos crea el archivo sin carpetas ni rutas y m5 es el nivel de compresión que va desde 0 (el más bajo) hasta 5 (el más alto).

Hacerlo de esta manero tiene sus pro y sus contras. Por una lado tenemos una forma de comprimir fácil y rápida, además, no solo funciona con winrar sino con más aplicaciones de compresión. Pero por otro lado, debes de tener instalado en el servidor una herramienta de compresión.
Ya es cuestión de las necesidades que tengáis si hacerlo así o de alguna de las otras formas
Espero que os sea de interes.
Un Saludo
El próximo martes 21 de Febrero, Second Nug nos mostrará cómo podemos automatizar al máximo los despliegues de nuestras aplicaciones y otras tareas relacionadas. Con este evento pretendemos que aprendas a minimizar el tiempo, esfuerzo y riesgo dedicado a este tipo de actividades repetitivas e inevitables en cualquier proyecto de desarrollo.
Veremos en acción todo el arsenal de herramientas que tenemos disponibles en entornos Microsoft para hacernos más fácil la automatización: MSBuild y Team Build, Power Shell, proyectos de base de datos, WebDeployment Toolkit, etc. Para ello contaremos con Jose Luis Soria, ALM TeamLead de Plain Concepts y Professional Scrum Trainer.
Url Registro: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032504085&Culture=es-ES

Además, todos los eventos anteriores de este año así como sus materiales están aqui disponibles:
- Eventos Desarrollo
Y dispones de nuestro Histórico de Eventos, con los eventos desde 2008 a 2011:
Esperamos veros allí 
Un Saludo
El próximo martes 7 de Febrero, Second Nug trata uno de los temas de programación que casi nunca faltan en nuestros desarrollos: XML (eXtensible Markup Language).
Hablaremos de todo o casi todo, desde qué es XML, su gramática, transformaciones con XSLT, XPath, el DOM con su parser, los readers y los writers, su utilización en Web Services (SOAP, WSDL), hasta XML en SQL Server y Linq para XML. Todos estos conceptos irán acompañados de un gran número de ejemplos donde se irá poniendo en práctica todo lo aprendido.
No te pierdas este evento que nos dará Javier Alia, Senior Consultant en Avanade con una larga experiencia trabajando en proyectos de integración y con distintas versiones de Biztalk.
Url Registro: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032504099&Culture=es-ES

Además, todos los eventos anteriores de este año así como sus materiales están aqui disponibles:
- Eventos Desarrollo
Y dispones de nuestro Histórico de Eventos, con los eventos desde 2008 a 2011:
Esperamos veros allí 
Un Saludo
Cuando creas una gráfica en Reporting Services 2008 R2 y este crea una leyenda que puedes utilizar si quieres. Por defecto viene con un tamaño predeterminado que puede servir o no según que caso. En mi caso necesitaba tener dicha leyenda en modo columnas, es decir una debajo de la otra porque el texto es muy grande para tenerlas todas en la misma fila.
Como ahora vienen todo más modular, es decir, cada elemento de la gráfica tiene sus propiedades (ya no viene todo en una misma ventana de propiedades como en la versión de 2005), para hacer que por ejemplo el texto de cada item de nuestra leyenda entre en una línea, tan sólo hay que situarse en la leyenda e ir a sus propiedades (F4) y buscar la propiedad TextWrapThreshold y establecerla a 0. Con esto conseguimos el efecto deseado.

Espero que os sea de utilidad
.
Un Saludo

El próximo 7 de marzo puedes unirte al lanzamiento de SQL Server 2012. Más de 30 sesiones para aprender sobre las nuevas capacidades de este nuevo producto.
Tienes toda la info sobre este lanzamiento en: http://www.sqlserverlaunch.com/ww/Home
La agenda aquí: http://www.sqlserverlaunch.com/ww/agenda
Y por supuesto el registro: http://www.sqlserverlaunch.com/ww/Register
Ya falta ná
!
Un Saludo
Más artículos
Página siguiente >