sábado, 21 de noviembre de 2009

Tips & Tricks Error SQLFile.sql

Al intentar ejecutar una consulta con el management studio nos da un error:


Para solucionarlo, podemos crearnos en ese mismo directorio un fichero que se llame SQLFile.sql sin contenido, y asunto solucionado. Otra manera es copiar el mismo fichero de otro equipo en el que tengamos SQL Server 2005 o 2008 instalado.

Recetario T-SQL

A groso modo vamos a ver el flujo que sigue una query:

Análisis -- Algebrizer (no se como traducirlo xD) -- Optimización -- Ejecución

Ahora veamos una pregunta que me llegaba vía email:
Supongamos que tenemos una tabla Prueba con dos columnas (IDPrueba y Descripcion), ejecutamos un script que elimina la columna Descripcion de la tabla y más adelante en el script encontramos lo siguiente:
IF 1=0
BEGIN
UPDATE Prueba SET Descripcion='Hola'
WHERE IDPrueba = 1
END
GO

Como 1 no es igual a cero no debe ejecutarse el contenido, pero al ejecutar el script vemos que nos devuelve un error advirtiéndonos de que el campo Descripcion es erróneo.
Mens. 207, Nivel 16, Estado 1, Línea 3
El nombre de columna 'Descripcion' no es válido.

Una solución para que no nos de este error es usar SQL dinámico y nuestro código quedaría tal que así:
IF 1=0
BEGIN
EXECUTE('UPDATE Prueba SET Descripcion=''Hola''
WHERE IDPrueba = 1')
END
GO

miércoles, 11 de noviembre de 2009

Restore Database con SMO C#

Bueno para ir completando la serie de posts con SMO hoy toca el esperado restore. Antes de nada pediros disculpas por no haberlo publicado antes, pero ando liado por casa y no he tenido tiempo para actualizar el blog.

Aquí tenéis el código:



A tener en cuenta: en la cadena de conexión sólo especificad el servidor (Data Source) y el tipo de conexión (si es trusted o con credenciales de sql).

miércoles, 30 de septiembre de 2009

Compatibilidad hacia atrás en Office

Mediante la aplicación TlbImp.exe (http://msdn.microsoft.com/es-es/library/tt0cf3sx(VS.80).aspx) podremos convertir un componente COM de Office (por ser el tema del post) en una assembly .NET Interop lista para usar y distribuir con nuestra aplicación. La manera de hacerlo es simple y directa:
1.- Lo primero es localizar dónde está situada la aplicación TlbImp.exe: se encuentra en C:\Archivos de programa\Microsoft Visual Studio 8\SDK\v2.0\Bin\
(o bien en la unidad dónde tengáis instalado Visual Studio)
2.- Copiamos el fichero (.olb ver último link del post para saber de lo que hablo) que queremos convertir en nuestra dll .NET, en un directorio por ejemplo C:\Interop
3.- Abrimos la línea de comando y vamos hasta la ruta dónde tenemos la aplicación TlbImp y escribimos
C:\Archivos de programa\Microsoft Visual Studio 8\SDK\v2.0\Bin\TlbImp.exe C:\Interop\MSWord9.olb /out=C:\Interop\FRVSoft.Office.Word.dll
Y ya tendremos creada nuestra dll.

Ahora sólo tenemos que añadirla en las referencias de nuestro proyecto. Con esto conseguimos tener una compatibilidad desde Word 2000 hasta Word 2007. Claro está que si queremos usar alguna característica nueva de Office 2007 no dispondremos de ella en nuestra dll ya que partimos de la versión 2000.

Este enlace os puede ser de utilidad algún día en el futuro, cuando tengáis que pelear con Office desde vuestras aplicaciones, en distintos clientes con diferentes versiones de Office:
http://support.microsoft.com/kb/239930/es

viernes, 11 de septiembre de 2009

Soluciones a problemas relacionados con T-SQL

Otro link interesante con multitud de soluciones e ideas para abordar los problemas del día a día.

http://code.msdn.microsoft.com/SQLExamples

Otro eBook por la patilla sobre SQL Server cortesía de Quest Software

Aquí tenéis los link para descargaros SQL Server: A Practical Guide to Backup, Recovery & Troubleshooting con copyright de Quest Software

Parte 1:
http://www.quest.com/quest_site_assets/whitepapers/sql_server_ebook_a_practical_guide_to_backup,_recovery,_and_troubleshooting_(part_1).pdf

Parte 2:
http://www.quest.com/quest_site_assets/whitepapers/sql_server_ebook_a_practical_guide_to_backup,_recovery,_and_troubleshooting_(part_2).pdf

jueves, 10 de septiembre de 2009

AdSense esa gran chapuza

Hoy recibo un correo en el que Google AdSense me dice:

Estimado/a :

Al revisar nuestros datos, hemos detectado que su cuenta de AdSense ha
supuesto un peligro importante para nuestros anunciantes de AdWords. Dada
la posibilidad de que el mantenimiento de su cuenta en nuestra red de
editores perjudique económicamente a los anunciantes en el futuro, hemos
decidido inhabilitarla.

Consideramos que esta medida es necesaria para proteger los intereses de
los anunciantes y los de los demás editores de AdSense. Somos conscientes
de que esta situación puede causarle molestias, por lo que agradecemos de
antemano su comprensión y cooperación.

Si tiene alguna pregunta sobre su cuenta o las acciones que hemos
realizado, no conteste a este mensaje. Encontrará más información en la
página siguiente:
https://www.google.com/adsense/support/bin/answer.py?answer=57153.

Atentamente,

El equipo AdSense de Google.

Macho ni que fuera el Dioni o Roldán. En tres años de AdSense no tengo ni para pipas xDDDD.
Gracias a la gente que haya pinchado en los anuncios.
Seguiré publicando (porque el objetivo es compartir lo que aprendo y plasmarlo por si a otra persona le sirve), y seguramente el blog ganará en espacio para otras cosas y no en anuncios chorras de lectura de manos y sus muertos los cuales aleatoriamente publicaba google.

P.D. La peonza, la trompeta y el par de calcetines, puedes venir a recogerlos cuando quieras y metértelos por el culo.

martes, 8 de septiembre de 2009

C# parámetros por referencia (out y ref)

Para el CLR, out y ref son idénticos (generan los mismos metadatos y el mismo código IL), pero el compilador de C# los trata de manera distinta.

Esa distinción se basa en que, si usamos out en un parámetro de un método, no estamos obligados a inicializar el objeto antes de la llamada al método. En cambio si usamos ref, antes de la llamada al método debemos inicializar el valor del parámetro.

Otro punto a tener en cuenta es que no podemos sobrecargar un método en el que la sobrecarga difiera sólo en out y ref, ejemplo:
static void Suma(out Int32 n) { }
static void Suma(ref Int32 x) { }
Este caso provocaría un error de tipo 'Suma' cannot define overloaded methods that differ only on ref and out.

domingo, 6 de septiembre de 2009

Mejorando el rendimiento en nuestros constructores de clase

Cuanto más leo CLR Via C# más me gusta el libro, una de las cosas que me ha llamado la atención es la manera de declarar los diferentes constructores que pueda tener una clase. Por ejemplo, supongamos que tenemos una clase "X", con "n" campos a inicializar, y en esa clase definimos "X" constructores diferentes, ejemplo:

    internal sealed class MenosRendimiento

    {

        private int _a = 1;

        private string _cadena = "Hola";

        private double _n = 5.125;

        private byte _b;



        public MenosRendimiento() { }

        public MenosRendimiento(int a) { }

        public MenosRendimiento(string cadena) { }

        public MenosRendimiento(int a, string cadena) { }

    }



De esta forma estamos incurriendo en un gasto de recursos innecesarios, ya que estaremos inicializando los tres campos de la clase en cada constructor (en este caso 12 veces). _b nos garantiza que se inicializa a cero aunque no lo especifiquemos.

Lo correcto sería declarar los campos de clase sin inicializar, crear un constructor simple que inicialice los campos, y los demás constructores llamarán al constructor de inicialización común, para verlo más claro os pongo como quedaría el código:

    internal sealed class MasRendimiento

    {

        private int _a;

        private string _cadena;

        private double _n;

        private byte _b;



        //Este constructor inicializa los campos

        //a su valor por defecto.

        //todos los demás constructores llamarán

        //explícitamente a este constructor

        public MasRendimiento()

        {

            _a = 1;

            _cadena = "Hola";

            _n = 5.125;

            _b = 0xff;

        }

        //Campos a valor por defecto y luego

        //cambia a

        public MasRendimiento(int a) : this()

        {

            _a = a;

        }

        //Campos a valor por defecto y luego

        //cambia cadena

        public MasRendimiento(string cadena) : this()

        {

            _cadena = cadena;

        }

        //Campos a valor por defecto y luego

        //cambia a y cadena

        public MasRendimiento(int a, string cadena)

            : this()

        {

            _a = a;

            _cadena = cadena;

        }

    }



Esta es la "magia" que nos aporta C#, que mediante "this" podamos llamar de un constructor a otro.

sábado, 5 de septiembre de 2009

Backup con SMO en C#

Así ya tenemos a los hermanitos (un ejemplo en el blog en VB y otro en C#):

try
{
    using (SqlConnection cn = new SqlConnection(llConexion.Text))
    {
        cn.Open();
        serverConnection = new ServerConnection(cn);
        Backup bck = new Backup();
        bck.Database = serverConnection.DatabaseName;
        bck.Devices.Add(new BackupDeviceItem(rutaBackup + @"\" + serverConnection.DatabaseName + ".BAK", DeviceType.File));
        bck.Action = BackupActionType.Database;
        bck.SqlBackup(new Server(serverConnection));
        MessageBox.Show("Proceso completado");
    }          
}
catch (SmoException ex)
{
    MessageBox.Show(ex.Message);
}

Kill a todas las conexiones de una BD con SMO

Ahí va un post sencillito con SMO:

using (SqlConnection cn = new SqlConnection(llConexion.Text))
{
    cn.Open();
    serverConnection = new ServerConnection(cn);
    Server server = new Server(serverConnection);
    server.KillAllProcesses(serverConnection.DatabaseName);
    MessageBox.Show("Proceso terminado");
}


Dónde, llConexion.Text será la cadena de conexión con vuestra BD. ServerConnection es una variable global inicializada a null (en el contexto de mi aplicación, para este ejemplo podría haberla declarado después de abrir la conexión de esta manera,
ServerConnection serverConnection = new ServerConnection(cn);)

viernes, 4 de septiembre de 2009

Teclas rápidas IE 8

Me encantan los atajos de teclado y no tener que estar dale que te pego al ratón, así que aquí os dejo las teclas rápidas de Internet Explorer 8:

http://www.microsoft.com/spain/windows/products/winfamily/ie/quickref.mspx

Que gozada, CTRL+TAB, CTRL+MAY+TAB, ALT+Inicio, CTRL+T, con estas me conformo y luego las pijadillas CTRL+Q

miércoles, 2 de septiembre de 2009

[OT] Teléfono Windows

Más bien conocidos como Windows Phone, es la novedad que llegará el próximo 6 de Octubre. En realidad son los nuevos teléfonos equipados con Windows Mobile 6.5 y que serán distribuidos por las principales operadoras de telefonía y los principales fabricantes de teléfonos, aquí os dejo una relación por continentes:

- En Norte América: operadoras móviles AT&T, Bell Mobility, Sprint, TELUS y Verizon Wireless, fabricantes HP, HTC Corp., LG Electronics, Samsung y Toshiba Corp.
- En Europa: operadoras móviles Orange, Deutsche Telekom AG y Vodafone Group Plc, y fabricantes Acer, HTC, LG Electronics, Samsung, Sony Ericsson y Toshiba
- Latinoamérica: operadoras móviles TIM Brazil, y fabricantes HTC, LG Electronics y Samsung
- En Asia: operadoras móviles NTT DOCOMO Inc., SOFTBANK Mobile Corp., SK Telecom, Telstra y WILLCOM Inc., y fabricantes Acer Inc., HTC, LG Electronics, Samsung, Sony Ericsson y Toshiba

Al contrario de lo que he leído en otras páginas microsoft asegura que habrá teléfonos para todos los gustos, con teclado qwerty o sin teclado, con pantalla táctil y sin pantalla táctil, con acelerómetro, GPS y cámaras de alta resolución.

Fuente: http://windowsteamblog.com/blogs/windowsphone/archive/2009/09/01/windows-phones-are-coming-on-october-6th.aspx

lunes, 31 de agosto de 2009

SQL Server 2008 R2 y mi BD de Producción

Atención, si instaláis la actualización a SQL Server 2008 R2 CTP y atacháis una BD en Producción (digo esta porque es la más importante por el destrozo que puede ocasionar xDDD, pero vale para cualquiera), que sepáis, que si luego os arrepentís y volvéis a SQL Server 2008 SP1 o RTM, no os dejará atachar ni restaurar la BD. El problema radica en que cambia la versión física de la BD a 660 mientras que nuestra BD en SQL Server 2008 SP1 está en una versión 655.

Esto no lo digo yo, lo dice mi amigo Paul Randal, así que hacedle caso y cuidadín con los probeteos.

miércoles, 26 de agosto de 2009

Windows Server 2008 y MSDE 2000

He leído en internet, a gente que dice que la MSDE 2000 no funciona bajo Windows Server 2008, porque es demasiado vieja, etc.
Puedo deciros que es completamente falso, ya que en uno de nuestros clientes tenemos funcionando nuestra aplicación de gestión bajo MSDE 2000 con SP4 en un servidor con Windows Server 2008.

jueves, 13 de agosto de 2009

Importar fichero XML a una tabla

Esto sólo funciona para SQL Server 2005 y SQL Server 2008. Se puede conseguir gracias a la opción BULK de OPENROWSET y luego usando la capacidad XQuery que nos proporciona SQL Server para parsear el xml en una tabla.
Al lío que me lío.

En C:\Libros.xml tengo un xml conteniendo:


Lo que intento es volcar los datos de ID y Titulo en una tabla Libros, para ello, nos creamos la tabla:

--Creamos la tabla
CREATE TABLE Libros(
ID INT PRIMARY KEY,
Titulo VARCHAR(100))

Y ahora pasamos los datos (os pongo una imagen con todo el código y el resultado del select sobre la tabla):


miércoles, 5 de agosto de 2009

Pantallazo azul

Bueno con esto quiero responder a un correo de un amigo y la discusión que planteaba en el correo. En esta imagen se puede ver una máquina de CocaCola con un pantallazo azul. El motivo de este post es aclarar que ese pantallazo azul no es consecuencia de un error de memoria, sino un error con un controlador USB. Si os fijáis en la última línea del pantallazo veréis que dice usbhub.sys

Investigando un poco he llegado a un blog en el que explican este error y su posible solución, el link lo tenéis aquí:
http://ayudabsod.blogspot.com/2009/06/kerneldatainpageerror-0x0000007a.html
Pero como no podemos fiarnos de todo lo que leemos, he seguido investigando un poco más.
Varias de las cosas que he aprendido es:
1.- El pantallazo nos da la información para indagar en el error, sólo tenemos que saber diferenciar la paja del grano. Las tres líneas que nos dan la información son, una que dice, KERNEL_DATA_INPAGE_ERROR
luego otra que dice STOP: 0x0000007A (parámetro1, parámetro2, parámetro3, parámetro4)
y por último la última línea que dice usbhub.sys
2.- Con estos datos vamos a la biblioteca de Microsoft, ya que son sus errores (;-)) y con un poco de suerte tendremos la solución
http://msdn.microsoft.com/en-us/library/ms793989.aspx
Si os fijáis en los parámetros entre paréntesis, el segundo parámetro nos dice, según la msdn:
0xC0000185, or STATUS_IO_DEVICE_ERROR, indicates improper termination or defective cabling on SCSI devices or that two devices are trying to use the same IRQ
No he encontrado más información acerca de los demás parámetros ya que no se diferencian bien los caracteres. Tampoco sabemos que sistema operativo usa la dichosa máquina.

lunes, 3 de agosto de 2009

Ejecución Diferida y Ejecución Inmediata (LINQ)

Esta es una de las bases de LINQ. ¿Pero qué significa ejecución diferida?
Significa que al ejecutar una consulta LINQ, la totalidad de los resultados no se cargan en memoria, en su lugar los resultados se van cargando a medida que se evalúa la consulta. Esta es la ventaja principal, porque hace que ahorremos recursos.
Por ejemplo, supongamos que tenemos una consulta que nos devuelve mil elementos, si sólo nos interesa el primer elemento y queremos descartar los demás, esos 999 elementos no se cargarán en memoria.
Otra de las ventajas de la ejecución diferida es que nos permite reutilizar la consulta cuando queramos y las veces que lo necesitemos.

Por otro lado tenemos la ejecución inmediata. ¿Qué significa?
A veces por la naturaleza de nuestro programa necesitaremos que la consulta se ejecute completamente, antes de que se procesen los resultados (cómo ejemplo de ejecución inmediata tenéis el post que escribí el otro día Cargar RSS en un Datagridview, la última línea de código dgvRSS.DataSource = feeds.ToList();).
El método de extensión ToList() es lo que fuerza la ejecución inmediata.

Ejemplo de los dos casos:

sábado, 1 de agosto de 2009

Casting con los operadores "is" y "as" en C#

Estoy leyendo el libro CLR Via C# y quería compartir con vosotros algo que he visto y resulta interesante en cuanto a rendimiento en el código ;-)

El operador "is" comprueba si un objeto es compatible con un tipo dado, y el resultado de la operación es un valor booleano (true o false). El operador "is" nunca provoca una excepción.
Ejemplo:
Object o = new Object();
Boolean prueba = (o is Object); //prueba es true
Boolean prueba2 = (o is Persona); //prueba2 es false

Si la referencia al objeto es null, el operador "is" siempre devuelve el valor false, porque no hay un objeto disponible para verificar su tipo.
El modo más común de usar el operador is:
if (o is Persona)
{
Persona p = (Persona) o;
//...
}

El CLR según nuestra condición IF del ejemplo verificará el tipo de objeto 2 veces, primero comprobará si o es compatible con el tipo Persona. Si lo es, dentro del if, el CLR otra vez comprobará que o referencia a una Persona cuando haga el cast.
El CLR nos proporciona seguridad, pero a costa de rendimiento, ya que el CLR determina el tipo actual del objeto referenciado por la variable o, y luego el CLR recorre la jerarquía de herencia comprobando cada tipo base contra el tipo especificado (Persona).

Aquí es dónde C# viene en nuestro rescate y nos ofrece el operador "as" para simplificarnos la vida y ganar en rendimiento:
Persona p = o as Persona;
if (p!=null)
{
//...
}

En este código el CLR comprueba si o es compatible con el tipo Persona, si lo es, "as" devuelve una referencia no nula al mismo objeto. Por contra si no es compatible, devuelve un valor null. La buena noticia, es que el operador "as" provoca que el CLR sólo tenga que comprobar el tipo de objeto una única vez.
El operador "as" tampoco genera ninguna excepción, si el objeto no puede convertirse, simplemente devuelve un valor null.

Eso es todo, voy a seguir escuchando MOS (Ministry of Sound, no penséis en Sharepoint frikis!!!) Trance Nation que ya es sábado sabadete ...

viernes, 31 de julio de 2009

Recetario T-SQL

Ejecución de un lote X veces. ¿Cómo lo conseguimos?
Muy sencillo, a partir de SQL Server 2005, se introdujo la posibilidad de ejecutar un batch x veces mediante el comando GO X (siendo X el número de veces que queremos que se ejecute).
Ejemplo:

SELECT GETDATE() AS FechaActual
GO 10

Cargar RSS en un DataGridView con LINQ to XML

Vamos a cargar las rss de mi blog en un datagridview, para ello creamos una clase Feed tal como esta:


Ahora el resultado de los feeds en una consulta sencillita en LINQ to XML la pasamos a nuestro datagridview:




Y el resultado final lo vemos aquí:

martes, 14 de julio de 2009

El juego SIMON


¿Quién no ha jugado con este juego? Bueno seguro que la gente más joven no sepa ni lo que es, pero era un juego basado en la memoria visual y sonora. Personalmente adictivo (como para otros el cubo de Rubick), me lo regalaron de pequeño y siempre he guardado un grato recuerdo del juego.
El juego consiste en visualizar una secuencia de colores (aleatorios) y luego repetirlos. Cada vez que acertemos la secuencia, empezará otra más difícil y así sucesivamente hasta que fallemos.
El motivo del post, es que he encontrado en CodePlex este juego hecho en WPF, Silverlight (2 y 3) y Surface. Te lo puedes descargar desde aquí:
http://simon.codeplex.com/ (sección downloads)
Lo mejor de todo es que viene con sus fuentes y así puedes disfrutar doblemente, una con el juego y otra con el código.
El autor del juego es David J Kelley (http://hackingsilverlight.blogspot.com/ o bien http://www.hackingsilverlight.net/ (para poder acceder a esta página necesitas tener instalado Silverlight 3).

sábado, 11 de julio de 2009

Recetario T-SQL

Este es un SP (procedimiento almacenado o stored procedure en el idioma de Shakespeare) no documentado por los BOL de SQL Server, pero que puede ser de gran utilidad a la hora de eliminar todos los datos de nuestras tablas, etc.

exec sp_MSforeachtable 'TRUNCATE TABLE ?'

Otra utilidad menos maligna es usar este SP para obtener todos los nombres de nuestras tablas, y por ejemplo almacenarlas en una tabla temporal para luego ... (lo dejo abierto a la imaginación de cada uno y la utilidad que quiera darle). Así nos evitamos los puñeteros cursores xDDD

exec sp_MSforeachtable 'SELECT "?" AS Tabla'

Configuración básica de SQL Server a nivel de OS

A nivel de sistema operativo es importante realizar la siguiente comprobación:

1.- Click con el botón derecho en MiPC y seleccionamos Propiedades, luego seleccionamos la pestaña de Opciones Avanzadas, en esta pestaña hacemos click en el botón Configuración de la opción Rendimiento. La opción que debemos seleccionar es Ajustar para el mejor rendimiento de: Servicios en segundo plano.

2.- Si es posible, lo mejor es situar el archivo de paginación del sistema en una unidad diferente a la de las BD de SQL Server.

3.- Servicios de Windows no necesarios, tendremos que parar aquellos servicios que no nos hagan falta. Aquellos servicios necesarios los configuraremos de manera que se arranquen automáticamente.

4.- Conectividad, sólo usaremos los protocolos que necesitemos para conectar con SQL Server. Para deshabilitar los no necesarios lo haremos a través del Configuration Manager de SQL Server.

5.- Firewall, es muy importante configurarlo adecuadamente para que podamos conectar con SQL Server sin problemas. Si tenemos configurado SQL Server de forma que la conexión con los puertos sea aleatoria, lo mejor es añadir una excepción en el firewall que incluya el ejecutable Sqlserv.exe y Sqlbrowser.exe

sábado, 20 de junio de 2009

Deep Zoom Composer

Ayer se publicó una nueva versión de Deep Zoom Composer June 2009 Preview, antes de instalar esta nueva versión es recomendable desinstalar la versión anterior en caso de tenerla en nuestro equipo.

Novedades significativas que incorpora son:
-Soporte para navegación, se podrá navegar entre imágenes, o en áreas de imágenes.
-Mejor uso de la memoria, ahora consume menos recursos, lo que se traduce en poder trabajar con más imágenes.
-Importar imágenes y exportarlas sin tener que pasar previamente por el área de diseño.
-Reporting de imágenes que acaparan más atención.

domingo, 14 de junio de 2009

OFFICE 2010 (Office 14)

El próximo mes de Julio expirará la CTP de Office 2010. Los requerimientos para poder usar la nueva versión de office: (según el blog de office2010)
1.- Funcionará en plataformas 32 y 64 bits.
2.- Correrá en Windows XP SP3, Windows Vista y Windows 7
3.- No hace falta actualizar el hardware de la máquina, si tu equipo puede con Office 2007 también podrá mover la versión 2010.

En este enlace podremos seguir las evoluciones de la nueva suite:
www.office2010themovie.com
así como en este blog:
http://blogs.technet.com/office2010/

Así que ya tenemos a Microsoft a tope preparando las presentaciones, me imagino que conjuntamente con Windows 7.

miércoles, 8 de abril de 2009

SQL Server 2008 SP1

Pues otra noticia del día. Han publicado el primer Service Pack para SQL Server 2008. El enlace lo tenéis aquí:

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=66ab3dbb-bf3e-4f46-9559-ccc6a4f9dc19

Por fin

Ha llegado a mis manos el libro de SQL Server 2008 Internals, ya empezaba a impacientarme porque los de Amazon me decían que no lo habían recibido y tampoco sabían cuando tendrían existencias disponibles.
Por lo menos la espera ha valido la pena ;-)

lunes, 2 de febrero de 2009

Microsoft SQL Server 2008 Internals

Marcad en vuestro calendario la fecha de publicación de un libro MH (Must Have). Yo lo tengo pedido en Amazon y lo espero con impaciencia.
La fecha en cuestión es el día 18 de Febrero, el precio es de 59.99$, si lo compras por Amazon se queda en 37.79$ más gastos de envío.
Sus autores son: Kalen Delaney, Paul S. Randal, Kimberly L. Tripp (vaya trío), Conor Cunningham, Adam Machanic, y Ben Nevarez.

Ejecutando DBCC CHECKDB de manera correcta

Hola a tod@s, hoy no voy a extenderme mucho y el post será breve. Al lío: la manera correcta de buscar los errores e incoherencias en nuestras BD es la siguiente:

DBCC CHECKDB (miBD) WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO

¿Por qué?, básicamente porque si no especificamos ningún parámetro DBCC CHECKDB sólo nos muestra los 200 primeros errores que encuentra, en el caso de tener más ... : P tú te lo pierdes.

Y además con el parámetro NO_INFOMSGS estamos eliminando la morralla de lo realmente interesante.

Observaciones: según la documentación de los BOL, el SP3 de SQL Server 2005 hace que al ejecutar la instrucción DBCC CHECKDB esta por defecto ejecute el parámetro ALL_ERRORMSGS sin necesidad de especificarlo.

miércoles, 28 de enero de 2009

Silverlight 2.0 Day

Fecha: Viernes 30 de Enero
Lugar: Clave Informatica (Elche – Alicante)
Titulo: Silverlight 2.0 Day (by José Luís Latorre MVP ASP/ASP.NET, especializado en las tecnologías cliente: WPF, Silverlight y ASP.NET)

16:00 - 16:30 Registro16:30 - 17:45 Introducción a Silverlight 2.0
17:45 - 18:15 Descanso18:15 - 19:30 Técnicas de layout y best practices

Link de registro: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032403239&Culture=es-ES

Allí nos veremos xD

Mastering SQL Server Profiler

Vía SQLServerCentral y RedGate nos llega este e-book en descarga gratuita. La verdad es que tiene buena pinta y debería ser de lectura recomendada para entender el funcionamiento del Profiler y sacarle el máximo provecho.
Os dejo el link para la descarga (no se durante cuanto tiempo estará activo):
http://www.red-gate.com/products/SQL_Response/offers/mastering_sql_profiler_ebook.htm?utm_source=ssc&utm_medium=email&utm_content=profiler20090128&utm_campaign=sqlresponse

martes, 13 de enero de 2009

Cambios en librerías SMO con SQL Server 2008

Si tenéis que actualizar en algún proyecto vuestras dll relativas a SMO para adecuarlas a vuestro servidor con SQL Server 2008, es conveniente que sepáis que el objeto Backup que antes se encontraba en Microsoft.SqlServer.Smo.dll ahora se encuentra en Microsoft.SqlServer.SmoExtended.dll

La ruta para agregar esta nueva librería (dependerá de dónde tengáis instalado SQL Server), es la siguiente:
C:\Archivos de programa\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SmoExtended.dll

martes, 6 de enero de 2009

Recetario T-SQL

--Devolver todas las columnas de una tabla concreta separadas por comas
DECLARE @Columnas varchar(4000)
SET @Columnas=''

SELECT @Columnas=@Columnas+sc.name+',' FROM sys.columns AS sc INNER JOIN sys.tables AS st ON
sc.object_id=st.object_id
WHERE st.name='Cliente'
ORDER BY sc.column_id

SELECT @Columnas

De esta manera conseguiremos que el resultado se devuelva de esta forma:
IDCliente, Dni, Nombre, Apellidos, Dirección, ...

Esta receta nos puede ser de mucha utilidad si la tabla en cuestión tiene muchas columnas y nos supone una pérdida de tiempo el tener que teclearlas todas :)