3 sept 2013

Ejemplo de script (TRANSACT SQL) de carga inicial de datos


Anexo un ejemplo muy útil de una carga inicial de datos.

Tiene la ventaja de que si manejas una columna IDENTITY como llave (algo muy común); deshabilita la característica y al final del script la vuelve a habilitar.

Además realiza una actualización de datos si la clave ya existe. Si no existe, inserta el registro.

El secreto reside en trabajar con una tabla temporal, idéntica a la tabla a cargar/actualizar y el uso del comando MERGE.

CREATE TABLE #C_CONFIGURACION (

    [FL_CONFIGURACION] INT NOT NULL PRIMARY KEY,

    [DS_CONFIGURACION] NVARCHAR (100)  NOT NULL,

    [DS_VALOR]         NVARCHAR (1000) NOT NULL,

    [DS_COMENTARIOS]   NVARCHAR (1000) NULL,  

)

GO

INSERT INTO #C_CONFIGURACION (FL_CONFIGURACION, DS_CONFIGURACION, DS_VALOR, DS_COMENTARIOS) VALUES (1, 'CUENTA_CORREO', 'cuenta@gmail.com', 'Cuenta de correo')

INSERT INTO #C_CONFIGURACION (FL_CONFIGURACION, DS_CONFIGURACION, DS_VALOR, DS_COMENTARIOS) VALUES (2, 'USUARIO_CORREO', 'cuenta', 'Usuario de la cuenta de correo')

INSERT INTO #C_CONFIGURACION (FL_CONFIGURACION, DS_CONFIGURACION, DS_VALOR, DS_COMENTARIOS) VALUES (3, 'PWD_CORREO', 'password', 'Contraseña de la cuenta de correo')

INSERT INTO #C_CONFIGURACION (FL_CONFIGURACION, DS_CONFIGURACION, DS_VALOR, DS_COMENTARIOS) VALUES (4, 'SMTP_CORREO', 'smtp.gmail.com', 'SMTP')

INSERT INTO #C_CONFIGURACION (FL_CONFIGURACION, DS_CONFIGURACION, DS_VALOR, DS_COMENTARIOS) VALUES (5, 'PUERTO_SMTP_CORREO', '587', 'Puerto SMTP')

SET IDENTITY_INSERT ATP.C_CONFIGURACION ON

MERGE [ATP].[C_CONFIGURACION] AS O

USING #C_CONFIGURACION AS T

ON (T.[FL_CONFIGURACION] = O.[FL_CONFIGURACION])

WHEN NOT MATCHED BY TARGET

        THEN INSERT (FL_CONFIGURACION, DS_CONFIGURACION, DS_VALOR, DS_COMENTARIOS)

        VALUES (T.FL_CONFIGURACION, T.DS_CONFIGURACION, T.DS_VALOR, T.DS_COMENTARIOS)

WHEN MATCHED

        THEN UPDATE SET 

        O.DS_CONFIGURACION = T.DS_CONFIGURACION,

        O.DS_VALOR = T.DS_VALOR,

        O.DS_COMENTARIOS = T.DS_COMENTARIOS;

SET IDENTITY_INSERT ATP.C_CONFIGURACION OFF

DROP TABLE #C_CONFIGURACION

 

No hay comentarios.: