[SQL] Forzar uso de índices en SQL 2005 Express

15 01 2009

Hola a todos,

Luego de un tiempo sin escribir he decidido hacerlo de nuevo, para no olvidarme las cosas que voy aprendiendo en el día a día.

Hoy un amigo Sebastían Flores, me ayudó a probár que mi SQL Server 2005 Express realmente tenía un índice creado, pero que no lo usaba por considerarlo peor que un Index Scan.

En SQL Server 2000, si creaba el índice lo usaba aunque tuviese que hacer un Bookmark Lookup más costoso que un Index Scan.

La forma de forzar el uso de un índice en SQL es:

SELECT * FROM tblTaskProcesses (INDEX = IX_ProcessID) WHERE nextprocess = 1 AND processid IN (8,32,45)
http://blogs.msdn.com/apinedo/pages/mejorar-el-rendimiento-de-queries-en-sql-server.aspx




[SQL] Insertar valores en una Identity PK

26 08 2008

Ya que estamos con el tema de las identities PK, aprovecho para hacer este post de ayuda memoria.

Para insertar valores en columnas Identity hay que hacer:

SET IDENTITY_INSERT ON [myTable] ON

y luego de hacer los inserts correspondientes apagar esto con

SET IDENTITY_INSERT ON [myTable] OFF

And happy coding!

Saludos!





[SQL] Reiniciar los valores de una Identity PK

26 08 2008

Hoy me ecuentro haciendo una migración de un sistema, para que cumpla con los estándares PCI DSS.

Al realizar una herramienta de migración, me contré con que necesitaba reiniciar la columna Identity de la tabla en SQL, tras varios intentos.

Luego de leer Can I start IDENTITY values at a new seed?, la forma de lograr esto es:

DBCC CHECKIDENT(‘myTable’, RESEED, 0)

And happy migration!

Saludos!





[NHibernate] Cómo crear claves únicas

21 08 2008

Esta vez aprovecho para contar como crear claves de varías columnas en NHibernate.

Hace ya un tiempo que estoy leyendo y practicando con este ORM, ya que es el ORM recomendado por el movimiento ALT.NET, y realmente es genial para desarrollos Domain Driven Development.

Lo que estoy haciendo es generando el schema de la DB a partir de la clase SchemaExport de NHibernate. Mediante esta clase genero los scripts DDL necesarios para crear el schema de la DB partiendo de los archivos .hbm de mapeo.

Realmente estoy más que conforme con esta herramienta por lo flexible y orientada a aplicaciones de mediana a grande complejidad.

Bueno vamos al motivo del post :)

En este caso tengo una tabla de aplicaciones y otra de usuarios. Un usuario pertenece a una aplicacion y su username no se puede repetir. Esto nos lleva a tener que crear en la tabla usuarios una unique constraint que tenga como columnas a ApplicationId y a Username. Esto lo podemos hace en el archivo de mapeo de NHibernate usando el elemento <column ../> hijo del elemento <property …/> y definiendo el atributo unique-key.

El archivo de mapeo quedaría como sigue:

<?xml version=”1.0″ encoding=”utf-8″ ?>
<hibernate-mapping xmlns=”urn:nhibernate-mapping-2.2″
                   assembly=”WPoch.Common.Providers.Membership”
                   namespace=”WPoch.Common.Providers.Membership.Domain”>
  <class name=”User” table=”`User`”>
    <id name=”Id”>
      <generator class=”guid” />
    </id>
    <property name=”Username”>
      <column name=”Username” unique-key=”uq_User_Username”/>
    </property>
    <property name=”Password”/>
    <property name=”Comment”/>
    <property name=”CreatedOn”/>
    <property name=”Email”/>
    <property name=”FailedPasswordAttempsCount”/>
    <property name=”FailedPasswordAttempsWindowStart”/>
    <property name=”IsAnonymous”/>
    <property name=”IsApproved”/>
    <property name=”IsLockedOut”/>
    <property name=”LockedOutOn”/>
    <property name=”LoggedOn”/>
    <property name=”PasswordChangedOn”/>
    <many-to-one name=”Application” cascade=”all” not-null=”true”>
      <column name=”ApplicationId” unique-key=”uq_User_Username” />
    </many-to-one>

    <set name=”Roles” lazy=”true” cascade=”all” table=”UserRole”>
      <key column=”UserId” foreign-key=”fk_UserRole_User” />
      <many-to-many class=”Role” not-found=”exception” column=”RoleId”/>
    </set>
    <bag name=”ProfileProperties” lazy=”true” table=”UserProfile”>
      <key foreign-key=”fk_UserProfile_User”>
        <column name=”UserId” unique-key=”uq_UserProfile_Name”/>
      </key>
      <composite-element class=”ProfileProperty”>
        <parent name=”User”/>
        <property name=”Name” not-null=”true”>
          <column name=”Name” unique-key=”uq_UserProfile_Name”/>
        </property>
        <property name=”ValueType” not-null=”true” type=”Type”/>
        <property name=”ValueSerialized” type=”StringClob”/>
        <property name=”UpdatedOn” />
      </composite-element>
    </bag>
  </class>
</hibernate-mapping>

Como verán estoy desarrollando Membership, Role y Profile Providers de ASP.Net usando NHibernate de fondo, ya que lo que viene por defecto no es de mi agrado y acopla bien con los sistemas que estoy desarrollando.

Cuando tenga algo más avanzado, lo publicaré en la web.

Saludos,

Technorati Tags:





Alternativa al Tren Bala, el Tren para TODOS

18 05 2008

Revisando los email me contrè con un foward acerca de algo que ya habìa leido, pero esta vez con una iniciativa concreta.

Un sitio web para registrarnos y “firmar” virtualmente, una petición para que se tenga en cuenta la iniciativa un Tren para Todos.

Si son de Argentina van a saber de lo que estoy hablando y sino obvien este post. Le pido a todos los argentinos que aunque sea sumemos esfuerzos, que entre todos, por mìnimo que sea el esfuerzo simamos fuerzas.

El sitio es: TREN para TODOS (http://www.trenparatodos.com.ar).

 





Web Developers: No hagan esto en su aplicación!!!

16 05 2008

Navegando un poco y buscando algún CMS para .NET como alternativa a DotNetNuke me encontré con el post Un candidato a peor “captcha” de la historia (http://rafavargas.wordpress.com/2008/05/14/un-candidato-a-peor-captcha-de-la-historia/), la verdad IMPERDIBLE!!!





Escribiendo desde Word 2007

6 02 2008

Hola a todos,

Esta vez me encuentro probando la nueva funcionalidad de Word 2007, que es escribir Blogs, directamente desde el mismo Word.

Quizás si tengo tiempo más adelante, postee unas capturas de cómo se hace.

Saludos!