miércoles, 16 de mayo de 2012

Habilitar o Deshabilitar Triggers en SQL Server

Con este script se pueden habilitar o deshabilitar todos los triggers de la Base de Datos que se encuentre seleccionada.

    DECLARE @cTgName    VARCHAR(50)
    DECLARE @cTableName    VARCHAR(50)

    SET NOCOUNT ON;
   
    DECLARE Cur_TG CURSOR LOCAL FORWARD_ONLY FOR
        SELECT (SCH.NAME + '.' + STG.NAME) AS TG_NAME, (SCH.NAME + '.' + SAO.NAME) AS TABLE_NAME 
        FROM SYS.TRIGGERS STG,
        SYS.ALL_OBJECTS AS SAO,
        SYS.SCHEMAS AS SCH
        WHERE STG.PARENT_ID = SAO.OBJECT_ID
        AND SAO.SCHEMA_ID = SCH.SCHEMA_ID
           
    OPEN Cur_TG
    FETCH Cur_TG INTO @cTgName, @cTableName
   
    WHILE (@@FETCH_STATUS = 0)
    BEGIN

        BEGIN TRY
            -- Para Habilitar
            EXEC ('ENABLE TRIGGER ' + @cTgName + ' ON ' + @cTableName)
            -- Para Deshabilitar
            EXEC ('DISABLE TRIGGER ' + @cTgName + ' ON ' + @cTableName)
        END TRY
        BEGIN CATCH
            PRINT ERROR_MESSAGE()
        END CATCH

        FETCH Cur_TG INTO @cTgName, @cTableName

    END -- Fin del bucle WHILE
   
    CLOSE Cur_TG
    DEALLOCATE Cur_TG

Habilitar o Deshabilitar Llaves Foráneas en SQL Server

Con este script se habilitan o deshabilitan todos los foreing keys de la Base de Datos que se tenga seleccionada.


    DECLARE @cFKName    VARCHAR(50)
    DECLARE @cTableName    VARCHAR(50)

    SET NOCOUNT ON;

    DECLARE Cur_FK CURSOR LOCAL FORWARD_ONLY FOR        
        SELECT SFK.NAME AS FK_NAME, (SCH.NAME + '.' + SAO1.NAME) AS TABLE_NAME
        FROM SYS.FOREIGN_KEYS AS SFK,
        SYS.SCHEMAS AS SCH,
        SYS.ALL_OBJECTS AS SAO1
        WHERE SFK.SCHEMA_ID = SCH.SCHEMA_ID
        AND SFK.PARENT_OBJECT_ID = SAO1.OBJECT_ID

    OPEN Cur_FK
    FETCH Cur_FK INTO @cFKName, @cTableName
   
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
       
        BEGIN TRY

            -- Para Habilitar
            EXEC ('ALTER TABLE ' + @cTableName + ' CHECK CONSTRAINT ' +  @cFKName)
            -- Para Deshabilitar
            EXEC ('ALTER TABLE ' + @cTableName + ' NOCHECK CONSTRAINT ' +  @cFKName)
        END TRY
        BEGIN CATCH
            PRINT ERROR_MESSAGE()
        END CATCH

        FETCH Cur_FK INTO @cFKName, @cTableName

    END -- Fin del bucle WHILE
   
    CLOSE Cur_FK
    DEALLOCATE Cur_FK

lunes, 9 de abril de 2012

Generar Archivos CSV con Progress

Para  generar archivos CSV con Progress, se utiliza la instruccion EXPORT. Enseguida un ejemplo:

OUTPUT TO C:\REPORTES\PREDIO.CSV.

FOR EACH PREDIO NO-LOCK WHERE NUM-RUTA > 0 AND  NUM-RUTA < 999:
  EXPORT DELIMITER "," NUM-CUENTA DIRECC-ORIGINAL GIRO-USUARIO TIPO-USUARIO.
END.

OUTPUT CLOSE.


lunes, 2 de abril de 2012

Conectando Progress con ODBC

Para conectarnos a Progress mediante ODBC tenemos que instalar el driver primeramente, éste viene incluido en la suite de Progress DB y tambien tenemos que tener el servicio de BD escuchando en algun puerto conocido.

Despues ejecutaremos en Administrador de Conexiones ODBC, con el comando odbcad32 y configuraremos nuestra conexión de la siguiente manera:


Es importante usar el usuario sysprogress que originalmente no tiene password. Ahora para conectarnos a la BD lo podemos hacer desde cualquier cliente odbc; yo particularmente uso uno que se llama SQLDBX (http://www.sqldbx.com/).

Ahora ya teniendo la conexión podemos ver los usuarios de la BD con el siguiente query:

select "_userid", "_password", "_user-name" from pub."_user"

Para ver las tablas que contiene la BD podemos ejecutar el siguiente query:

SELECT * FROM sysprogress.SYSTABLES WHERE TBLTYPE = 'T'

Para ver el contenido de alguna tabla podemos ejecutar un query de la siguiente manera:

SELECT * FROM PUB.BENEFITS

Es importante siempre utilizar el esquema PUB, ya que de no hacerlo los queries no funcionarán.

Para crear un usuario nuevo podemos ejecutar la siguiente secuencia de queries:

create user 'sa','password';
grant dba to 'sa';


Una vez que creamos el usuario, automáticamente el usuario sysprogress ya no funciona para la conexión ODBC.


Arrancar y Detener Servicio de BD de Progress

Para arrancar el servicio de Progress DB ejecutaremos el siguiente comando, de preferencia debemos hacerlo con permisos de Administrador.

SET WRKDIR=C:\Progress\WRK
cd C:\Progress\dlc91c\bin
proserve.bat C:/DATA/sports2000/sports2000.db -S 2525 -N TCP -L 300000

Donde 2525 es el puerto en que escuchar el servidor de BD.

Para detener el servicio podemos ejecutar el siguiente comando.

cd C:\Progress\dlc91c\bin
proshut.bat C:/DATA/sports2000/sports2000.db

miércoles, 28 de marzo de 2012

¿Cómo saber si existe una tabla en la BD?

¿Cómo saber si existe una tabla en nuestra BD? Podemos crear y usar la sig función.

Para mandar llamar la funcion

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[existeTabla]
(
    @cTableName VARCHAR(255)
)
RETURNS BIT
AS
BEGIN
    DECLARE @nReturn BIT
    SET @nReturn = 0

    IF (SELECT COUNT(*) FROM SYS.OBJECTS
        WHERE TYPE = 'U' AND UPPER(NAME) = UPPER(@cTableName)) > 0 BEGIN
        SET @nReturn = 1
    END
   
    RETURN @nReturn
END

Para mandar llamar la funcion podemos usar el siguiente query:
SELECT [dbo].[existeTabla] ('TABLA_A_BUSCAR')

Si el resultado es 1 la tabla existe, en caso contrario no existe.


viernes, 16 de marzo de 2012

Crear Indices en Tablas Temporales

Para crear indices en tablas temporales, se puede utilizar el siguiente código.

CREATE TABLE #t1 (a int, b int)
GO
CREATE CLUSTERED INDEX Idx1 ON #t1(b)
CREATE UNIQUE NONCLUSTERED INDEX Idx2 ON #t1(a)
GO
INSERT INTO #t1 VALUES ('1', '0')
GO
DROP TABLE #t1


Nota: En Variables Tabla no se pueden crear índices.