Foutmeldingen van de vorm
Cannot insert the value NULL into column ‘…’, table ‘…’; column does not allow nulls.
komen uit SQL Server. Met Data Replicator wordt op SQL Server de BulkCopy-functionaliteit (bcp
) gebruikt. Deze laadt via een API batches van rijen.
Oorzaak
Waarschijnlijk is een upgrade geplaatst vanaf een 20.1 versie waarin nog voorlopige versies zaten van de *Incremental
tabellen. Hierin was een ontwerpfout gemaakt door alle velden van de Exact Online sync REST API’s mee te nemen, terwijl die deels incorrect zijn. Zie voor uitleg: Verzoek finetunen incremental tabellen Exact Online - 2 van forums.
Een deel van die inmiddels weer weggehaalde velden waren verplicht. De Invantive Data Replicator haalt echter nooit overtollige velden weg; het risico op geautomatiseerd dataverlies is te groot.
Het bijladen van gegevens zonder de vervallen velden leidt tot de foutmelding.
De foutmelding is echter niet bijzonder intuïtief; de interpretatie vereist uitgebreide kennis van het gekozen replicatieconcept met afwijkende kolom- en tabelnamen voor de opslaglaag.
Verbeterde Foutmelding
Voor een verbeterd gebruiksgemak is vanaf 20.1.484 de foutmelding komende vanuit de SQL Server driver herschreven naar:
itgenspr092
Data to insert contains NULL values for column ‘…’ while the column does not allow NULLs. Please make sure all values are not NULL.
Als SQL Server binnen Data Replicator gebruikt wordt als backing database, dan wordt bovendien een vertaling gemaakt van de (cryptische) tabel- en kolomnamen gebruikt voor de opslag naar de logische namen van het bronplatform zoals Loket of NMBRS.
De nieuwe foutmeldingen in dit specifieke scenario op SQL Server zijn in geval van verplichte velden die overtollig zijn t.o.v. de bron in de feitendatabase:
itgendci235
Could not load data for table partition version ‘…’ since the column ‘…’ has been defined as NOT NULL in the database table ‘…’, but has no associated source in the facts database.
Please make sure that the following superfluous fields in the table ‘…’ are evaluated for necessity: …
en in het geval van velden in de backing database die wel gekoppeld zijn aan de bron in de feitendatabase:
itgendci236
Could not load data for table partition version ‘…’ since the column ‘…’ has been defined as NOT NULL in the database table ‘…’, but contains no longer a value in ‘…’ for some rows in the facts database.
Please make sure that the NOT NULL property of ‘…’ in ‘…’ is evaluated for necessity.
De standaardfoutmelding:
itgendch493: Could not load data for table partition version ‘…’.
zal in alle overige gevallen getoond blijven worden.
Oplossing
De gekozen oplossing voor het weghalen van het repository is een van de mogelijke scenario’s. Met de nieuwe release had ook volstaan kunnen worden met enkel het weghalen van de overtollige velden na controle of dat geen zelf-geïntroduceerde velden zijn.