I have encountered the following message from one of the failed job which is scheduled hourly.
Executed as user: EBGROUP\svc_denue6dscl003_sq. The OLE DB provider "MSDASQL" for linked server "DEERDS09" could not UPDATE table "[MSDASQL]" because of column "austrittsdatum". The data value violated the integrity constraints for the column. [SQLSTATE 42000] (Error 7344) OLE DB provider "MSDASQL" for linked server "DEERDS09" returned message "Non-nullable column cannot be updated to Null.". [SQLSTATE 01000] (Error 7412). The step failed.
This job has three steps and first two is successfully done but failed every time in 3rd step (stated below) while updating.
WITH DEPARTURES as (
SELECT * FROM OPENQUERY(DEERDSXX, ''SELECT * FROM neue_ma.AustretendeMA ;'')
), PERSON as (
SELECT PERSNR_WR, AUSTRITT_WR, weblogin_WR,KUENDDATZU_WR
FROM [DATEV_DBENGINE].[DENUE6ASXXX\WINDVSW1\DATEV\DATEN\PMS\DATENBANKEN\WIS32DATEVDB].dbo.PERSON
WHERE DBACCOUNT = 40 AND PK > 0
)
, JOINPERSNMT as (
SELECT lfdnr, ma_uid, name, vorname, login, letztertag, austrittsdatum, confirmed
, convert(date,Austritt_WR) as Austritt_wr
, convert(date,isnull(KUENDDATZU_WR, Austritt_wr)) as ITDeactivation
, CAST(RIGHT(RTRIM(LTRIM(PERSNR_WR)), 6) as INT) as PERNR
,ISNULL(DATEADD(HOUR, 36, AUSTRITT_WR), CAST(''29991231'' as DATETIME)) as flagdate
, CASE WHEN SYSDATETIME() >= ISNULL(DATEADD(HOUR, 36, AUSTRITT_WR), CAST(''29991231'' as DATETIME)) THEN 10 else 0 end as confirmed_now
FROM DEPARTURES
LEFT OUTER JOIN PERSON
on person.weblogin_WR=DEPARTURES.Login)
update DEPARTURES set
DEPARTURES.confirmed=case confirmed_now when 10 then confirmed_now else DEPARTURES.confirmed end -- only update when confirmed now
, DEPARTURES.ma_status=case confirmed_now when 10 then 8 else DEPARTURES.ma_status end -- only update when confirmed now
, DEPARTURES.austrittsdatum=JOINPERSNMT.Austritt_wr
, DEPARTURES.letztertag=JOINPERSNMT.ITDeactivation
from JOINPERSNMT
where
(JOINPERSNMT.Austritt_wr<>DEPARTURES.austrittsdatum or JOINPERSNMT.ITDeactivation<>DEPARTURES.letztertag
or (JOINPERSNMT.confirmed_now=10 and JOINPERSNMT.confirmed_now<>JOINPERSNMT.confirmed)
)
and DEPARTURES.ma_uid=JOINPERSNMT.ma_uid and DEPARTURES.login=JOINPERSNMT.LOGIN;'
I have checked the 'austrittsdatum' column which has no Null values also checked the Austritt_wr which has null values but this is leaving date and the employees who are still in the org they would not have a leaving date. It was running smoothly until yesterday evening. What would be the RC?
I have checked the update logic without updating the columns
It returns one value for which Austritt_wr is NULL but KUENDDATZU_WR has a valid date. Which is not compliance according to business logic.