Una de las tareas comunes a la hora de adaptar un módulo de DotNetNuke para que sea compatible con Windows Azure, es la de adaptar los scripts de SQL de instalación para que puedan ejecutarse sobre SQL Azure. Con esta adaptación probablemente tenemos el módulo adaptado al 100%, ya que el resto del módulo debería funcionar del mismo modo en Windows Azure como en cualquier otro IIS hospedado fuera de la plataforma.
Al intentar realizar la instalación de un módulo para comprobar si funciona correctamente, probablemente nos encontremos con un problema en algún paso de la creación del esquema en SQL Azure, y en el que si estos scripts no están bien diseñados con sus correspondientes “Rollbacks”, pueden dejarnos objetos “basura” en el esquema de nuestra base de datos. Si intentamos volver a instalar el módulo, resulta que dará más problemas ya que estos objetos ya existen.
A continuación dejo un script de SQL para eliminar todos los objetos relacionados con un módulo, si es que éste se ha diseñado siguiendo las buenas prácticas de creación de módulos de DotNetNuke (todos los objetos comienzan por el nombre del módulo “<nombreModulo>_<nombreObjeto”, excepto las vistas que siguen la nomenclatura “vw_<nombreModulo>_nombreVista”.
En el ejemplo siguiente, el nombre del módulo es “mymodule”, palabra de búsqueda que debe ser reemplazada por el nombre del módulo en cuestión.
DECLARE @name varchar(250) DECLARE @type varchar(10) DECLARE @searchword varchar(250) DECLARE @command VARCHAR(2000) SET @searchword = '%mymodule_%' DECLARE objects_cursor CURSOR FOR ( SELECT name, type FROM sys.objects WHERE name LIKE @searchword AND (type IN ('U', 'P', 'FN', 'V', 'TF')) ) OPEN objects_cursor FETCH NEXT FROM objects_cursor INTO @name, @type WHILE @@FETCH_STATUS = 0 BEGIN SELECT @command = CASE @type WHEN 'P' THEN 'DROP PROCEDURE ' + @name WHEN 'U' THEN 'DROP TABLE ' + @name WHEN 'FN' THEN 'DROP FUNCTION ' + @name WHEN 'TF' THEN 'DROP FUNCTION ' + @name WHEN 'V' THEN 'DROP VIEW ' + @name ELSE '' END IF (@command <> '') BEGIN PRINT 'Dropping ' + @name + '...' EXEC (@command) END ELSE BEGIN PRINT 'WARNING: ' + @name + ' will not be deleted' END FETCH NEXT FROM objects_cursor INTO @name, @type END CLOSE objects_cursor DEALLOCATE objects_cursor
Espero que sirva de ayuda. Un saludo.