Iver's web place

Navegador de Archivos

Calendario del Blog

February 2012
Sun Mon Tue Wed Thu Fri Sat
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 1 2 3

General

Programación

  • Conteo de registros en todas las tablas MS SQL 2005

    Cuando inicie en esto del desarrollo de software tuve mi primer acercamiento con las tablas del sistema de SQL Server, al atender una incidencia y eliminar una tabla de producción, por tratar de recuperar los datos me dispuse a modificar algunas cosillas, cubrir un par de rastros, etc. Después de eso pasaron un par de años antes de saber más sobre las tablas del sistema.



    Hace poco buscando en Internet una consulta mediante las estadísticas que permita hacer el conteo de filas me encontré con un post donde se comentaba que Pablo Álvarez Doval daría una charla sobre optimización de SQL Server 2005.


    La charla estuvo genial, se abordaron temas bastante interesantes en tan poco tiempo, tengo mucho por aprender y mucho que compartir, pero sobre todo tengo la gran fortuna de disfrutar mi trabajo, coincidir en tiempo y espacio con grandes desarrolladores (freakies, geeks, etc) y de vez en cuando con uno que otro Técnicoless (para definición del termino, dirigirse al blog de Chema Alonzo.


    Bueno después de todo este rollo ¿Que paso con el count de las rows?. Fue el motivo por lo que inicie el post =P, para que no se me olvide como hacer dicho count lo pondré enseguida.



     
     
    SELECT S.Name AS [Schema], O.Name AS [TableName], PS.Row_Count
            FROM sys.indexes AS [INDEX]
                    INNER JOIN sys.objects AS O ON [INDEX].object_id = O.object_id
                    INNER JOIN sys.schemas AS S ON O.Schema_Id = S.Schema_Id
                    INNER JOIN sys.dm_db_partition_stats AS PS
                            ON [INDEX].object_id = PS.object_id AND [INDEX].index_id = PS.index_id
            WHERE [INDEX].index_id < 2
                    AND O.is_ms_shipped = 0
                    AND PS.row_count > 0
            ORDER BY PS.row_count DESC, S.Name, O.Name
     
    Después de la charla me han dado más y más ganas de conocer los meta datos, como funciona internamente el SQL y después de platicar un poco con el buen Pablo me ha animado a conocer Windbg (que ya solicité la charla igual). face-smile.png
  • Buscar texto en los objetos de la base de datos

    Los que nos dedicamos a esto del desarrollo del software y lidiar constantemente con código duro o embebido en scripts, bases de datos, etc, etc. requerimos automatizar muchas cosas para facilitar el mantenimiento y desarrollo de sistemas, para esto siempre nos acercamos a san google y vemos con que nos sale. Después de un tiempo creo que es momento de contribuir con la información que en muchas ocasiones he encontrado en google después de varias consultas infructuosas.



    En este caso mi intención será de aquí en adelante aportarle algo a google, mostrar más información sobre todo lo que tengo que hacer día a día en el trabajo y aportar un poco a la comunidad de las mejores prácticas con el ideal de hacer de este mundo ... un mundo mejor. =) jajaja.



    Iniciando ...

    La siguiente consulta nos ayuda a buscar cadenas de texto en los procedimientos almacenados y cuando son bastantes realmente es un dolor de cabeza.


     
        SELECT S.name, OBJECT_NAME(M.object_id), *
        FROM sys.sql_modules M
                    INNER JOIN sys.objects O ON O.object_id = M.object_id
                    INNER JOIN sys.schemas S ON O.schema_id = S.schema_id
        WHERE M.Definition LIKE '%texto_a_buscar%'
     
     


    Esto nos debe de valer para SQL 2000 en adelante.


    Otra forma de hacer la búsqueda bien puede ser con el siguiente código:


     
    DECLARE _at_TextToFind AS VARCHAR(300)
    SELECT _at_TextToFind = 'texto_a_buscar'
     
    SELECT S.Name AS [Schema], P.Name, M.definition
        FROM sys.procedures P
                    INNER JOIN sys.schemas S ON P.schema_id = S.schema_id
                    INNER JOIN sys.sql_modules M ON M.object_id = P.object_id
        WHERE OBJECT_DEFINITION(P.object_id) LIKE '%'+_at_TextToFind+'%'
    ORDER BY S.Name, P.Name
     
    Ya estaré agregando algo de código tan simple como este para facilitarnos la vida.
  • Eliminar procesos del WebServer de Visual Studio

    Cuantas veces no sucede que ejecutas una aplicación web de Visual Studio y se queda el servidor activo? En algunas ocasiones facilita la ejecución de la página, pero en otras ocasiones es muy molesto porque si trabajas con cache o alguna marranada en memoria y tienes varias aplicaciones en el proyecto, pueden cargarse tantas instancias como proyectos web tengas.



    Si quieres el camino rápido ejecuta los siguientes pasos.

    • Guarda en un archivo el comando (llamalo como quieras con extensión ps1):

    Get-Process | Where { $_.Name -Eq "WebDev.WebServer" } | Kill
    • Genera un acceso directo en el escritorio poniendo lo siguiente, sustituyendo ScriptKillWS.ps1 por el nombre de tu script:

    PowerShell.exe [PathDelArchivo]\ScriptKillWS.ps1

    Acceso Directo

    • Asigna los permisos de ejecución de scripts de Power Shell en tu máquina

    Set-ExecutionPolicy RemoteSigned
    Update:[04/Marzo/2010] Si con esto no te deja ejecutarlo, en la terminal después de ejecutar el comando anterior manda a llamar el script desde consola.

    Set-ExecutionPolicy RemoteSigned
    ScriptKillWS.ps1

    Ahora ... quieres entender lo que hiciste? .. sigue leyendo face-devil-grin.png

  • Compartamos código

    Cuando desarrollas aplicaciones de software a distancia, es común querer compartir código pero tenemos la limitante de que al hacerlo por correo no se ve el realzado de sintaxis y por mensajero es limitado el envío por los emoticons, el número de líneas o bien simplemente queremos que persista la información para un post en nuestro blog.

    Claro que algunos blogs como Jaws, permiten compartir un código como el siguiente y con sus respectivos tags.

     
     
       1:  ParameterExpression pc = Expression.Parameter(typeof(Customer), "c");
       2:  
       3:  IQueryable<Customer> q3 =
       4:      dc.Customers.Where<Customer>
       5:      (
       6:          Expression.Lambda<Func<Customer, bool>>
       7:          (
       8:              Expression.Equal(
       9:              Expression.Property(pc, typeof(Customer).GetProperty("City")),
      10:              Expression.Constant("London", typeof(string))
      11:          ),
      12:          new ParameterExpression[] { pc }
      13:          )
      14:      );
     
     
  • Internet Explorer 8 y la vista compatibilidad

    Después de varios intentos por mejorar el IE, Microsoft ha procurado seguir de menos un estándar, en esta ocasión con la versión de IE 8 el equipo de desarrollo de IE ha procurado seguir el estándar 2.1 de las CSS [1] y es una de las cosas que más llaman la atención debido a que constantemente podemos ver el icono para activar la vista compatibilidad.


    Compatibility View

    Por default esta vista está deshabilitada, debido a que los desarrolladores de páginas web nos vemos forzados a solucionar este tipo de problemas por más sencillos que parezcan, existen algunas etiquetas que nos pueden ayudar. La primera es la que forza a que la página se vea con las características de IE8, esto quiere decir que nuestra página cumple con el estándar 2.1 de las CSS y por tal motivo evitamos que salga el icono en la barra del navegador

     
    <meta http-equiv="X-UA-Compatible" content="IE=8" />
     
    También tenemos otra opción para asegurarnos de que se habilite la vista compatibilidad cuando se carga la página.

     
    <meta http-equiv="X-UA-Compatible" content="IE=Emulate7" />
     
    Dicha etiqueta debe aparecer antes que cualquier otra etiqueta y debe estar situado en el de la página.

     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head>
        <meta http-equiv="X-UA-Compatible" content="IE=Emulate7" />
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <title>TextboxList + Autocomplete demo</title>
      </head>
     
    Otra opción de la cual podemos sacar provecho es la que provee el IIS 7, donde podemos editar el archivo de configuración y establecer que todas las páginas se comporten de forma predeterminada con la vista compatibilidad agregando lo siguiente en el web.config.

     
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
       <system.webServer>
          <httpProtocol>
             <customHeaders>
                <clear />
                <add name="X-UA-Compatible" value="IE=EmulateIE7" />
             </customHeaders>
          </httpProtocol>
       </system.webServer>
    </configuration>
     
    Y por último se pude realizar esta verificación mediante JavaScript en la version 6 del IIS con el siguiente script.

     
    function IsStandardsMode()
    {
       !if(document.documentMode)
           return false;
       return (document.documentMode == 8);
    }
     
     
    [1] http://www.w3.org/TR/CSS2/
Anterior página 1 ... 3 4 5 ... 8 Siguiente página
39 Artículos

Estadísticas de visitantes

6
65
27403