我发现自己正在执行一个SP,它接受一个csv文件来加载一个TMP表,并根据文件中报告的记录,在最终表中执行记录的插入或更新,以下内容发生在我身上:
当表完全为空时,我插入了正确的记录,但是当加载的文件有一些记录和插入以及未插入的新记录时,我只更新已经插入的记录我没有插入新记录。
然后我分享我正在做的事情,以便他们通过表明我做错了来帮助我。
IF NOT EXISTS (SELECT A.placa,
A.id_rom
FROM tbl_certi_gnv AS A,
#importsuic AS B
WHERE A.placa = B.r_placa
AND A.id_rom = B.r_id_rom)
BEGIN
INSERT INTO tbl_certi_gnv
(placa,
id_rom,
nit_distribuidor,
nit_taller_conv,
nit_certificador,
fecha_certificacion_inicial,
fecha_ultima_revision,
fecha_proxima_revision,
boton_habilitado,
ciudad,
usuario_ingresa_datos,
fecha_procesamiento)
SELECT r_placa,
r_id_rom,
d_nit_distribuidor,
d_nit_taller_conv,
d_nit_certificador,
f_fecha_certificacion_inicial,
f_fecha_ultima_revision,
f_fecha_proxima_revision,
d_boton_habilitado,
r_ciudad,
d_usuario_ingresa_datos,
Getdate()
FROM #importsuic
END
ELSE
BEGIN
UPDATE tbl_certi_gnv
SET fecha_proxima_revision = B.f_fecha_proxima_revision,
fecha_procesamiento = Getdate()
FROM tbl_certi_gnv AS A,
#importsuic AS B
WHERE A.placa = B.r_placa
AND A.id_rom = B.r_id_rom
PRINT 'ENTRA A ACTUALIZAR'
END
答案 0 :(得分:0)
问题是您的逻辑检查是否存在任何行,如果存在,则转到更新部分。你需要做这样的事情:
.controller('SomeName', ['someData', function(someData) {
(...)
// works fine
然后插入缺少的行:
UPDATE tbl_certi_gnv
SET fecha_proxima_revision = B.f_fecha_proxima_revision,
fecha_procesamiento = Getdate()
FROM tbl_certi_gnv AS A,
#importsuic AS B
WHERE A.placa = B.r_placa
AND A.id_rom = B.r_id_rom
答案 1 :(得分:0)
我只是使用 merge 。
像这样:
merge tbl_certi_gnv as target
using #importsuic as source
on target.placa = source.placa
and target.id_rom = source.id_rom
when not matched by target
then insert (placa, id_rom, nit_distribuidor, nit_taller_conv, nit_certificador, fecha_certificacion_inicial
, fecha_ultima_revision, fecha_proxima_revision, boton_habilitado, ciudad, usuario_ingresa_datos, fecha_procesamiento)
values (source.r_placa, source.r_id_rom, source.d_nit_distribuidor, source.d_nit_taller_conv, source.d_nit_certificador
, source.f_fecha_certificacion_inicial, source.f_fecha_ultima_revision, source.f_fecha_proxima_revision
, source.d_boton_habilitado, source.r_ciudad, source.d_usuario_ingresa_datos, Getdate())
when matched by target
then update
set target.fecha_proxima_revision = source.f_fecha_proxima_revision
,target.fecha_procesamiento = Getdate();