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.:
Publicar un comentario