Simplicate uren nieuwe kolommen

Om de uren in Simplicate op te halen gebruik ik de volgende query:

create or replace table sp_hours_05_2024@msss
as
select *
from   Simplicate.Hours.Hours@spe
where  created_at >= '2024-05-01'
and    created_at < '2024-06-01'

Dit doe ik vervolgens voor elke maand tot en met december 2021. Vervolgens maak ik een view in SQL aan de hand van union all waar ik al deze tabellen samenvoeg. Voorheen werkte dit, echter probeer ik deze query uit te voeren en krijg ik de volgende melding:

Msg 205, Level 16, State 1, Procedure Hours, Line 7 [Batch Start Line 0]
All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.
Msg 4413, Level 16, State 1, Line 612
Could not use view or function 'dbo.Hours' because of binding errors.

Dit komt omdat er in Simplicate van Augustus 2022 naar September 2022 ineens extra kolommen zijn bijgekomen. Is het wellicht bekend waarom deze extra kolommen stoppen na September?

De reden voor deze query is omdat het inladen van de uren regels van Simplicate heel traag is. Door deze query gaat dat een stuk sneller. Hierbij een overzicht van het verschil in kolommen.

/****** Script for SelectTopNRows command from SSMS ******/ /****** Script for SelectTopNRows command from SSMS ******/ verwijderd
[rowid$] SELECT TOP (1000) [rowid$]
,[id] ,[id]
,[employee_id] ,[employee_id]
,[employee_person_id] ,[employee_person_id]
,[employee_name] ,[employee_name]
,[employee_employee_id] ,[employee_employee_id]
,[employee_tariff] ,[employee_tariff]
,[employee_amount] ,[employee_amount]
,[employee_declarable] ,[employee_declarable]
,[project_id] ,[project_id]
,[project_name] ,[project_name]
,[project_project_number] ,[project_project_number]
,[project_organization_id] ,[project_organization_id]
,[project_organization_name] ,[project_organization_name]
,[project_organization_relation_number]
,[project_person_id] ,[project_person_id]
,[project_person_full_name] ,[project_person_full_name]
,[project_person_relation_number]
,[project_project_manager_id] ,[project_project_manager_id]
,[project_project_manager_person_id] ,[project_project_manager_person_id]
,[project_project_manager_name] ,[project_project_manager_name]
,[project_project_manager_employee_id] ,[project_project_manager_employee_id]
,[project_project_manager_tariff] ,[project_project_manager_tariff]
,[project_project_manager_amount] ,[project_project_manager_amount]
,[project_project_manager_declarable] ,[project_project_manager_declarable]
,[project_has_register_mileage_enabled] ,[project_separate_invoice_recipient_is_separate_invoice_recipient]
,[projectservice_id] ,[projectservice_id]
,[projectservice_name] ,[projectservice_name]
,[projectservice_start_date]
,[projectservice_until_date]
,[projectservice_default_service_id] ,[projectservice_default_service_id]
,[projectservice_revenue_group_id] ,[projectservice_revenue_group_id]
,[type_id] ,[type_id] ,[projectservice_use_in_resource_planner]
,[type_type] ,[type_type]
,[type_billable] ,[type_billable]
,[type_vatclass_id] ,[type_vatclass_id]
,[type_vatclass_code] ,[type_vatclass_code]
,[type_vatclass_name] ,[type_vatclass_name]
,[type_vatclass_label] ,[type_vatclass_label]
,[type_vatclass_percentage] ,[type_vatclass_percentage]
,[type_label] ,[type_label]
,[type_tariff] ,[type_tariff]
,[type_blocked] ,[type_blocked]
,[type_color] ,[type_color]
,[approvalstatus_id] ,[approvalstatus_id]
,[approvalstatus_label] ,[approvalstatus_label]
,[approvalstatus_description] ,[approvalstatus_description]
,[invoice_status] ,[invoice_status]
,[invoice_id] ,[invoice_id] ,[assignment_id]
,[invoiceline_id] ,[invoiceline_id]
,[tariff] ,[tariff]
,[created_at] ,[created_at]
,[updated_at] ,[updated_at]
,[locked] ,[locked]
,[is_editable_value] ,[is_editable_value]
,[is_editable_reason_message] ,[is_editable_reason_message]
,[is_editable_reason_translated_message] ,[is_editable_reason_translated_message]
,[is_deletable_value] ,[is_deletable_value]
,[is_deletable_reason_message] ,[is_deletable_reason_message]
,[is_deletable_reason_translated_message] ,[is_deletable_reason_translated_message]
,[leave_status_id] ,[leave_status_id]
,[leave_status_label] ,[leave_status_label]
,[leave_id] ,[leave_id]
,[absence_id] ,[absence_id]
,[status] ,[status]
,[corrections_amount] ,[corrections_amount]
,[corrections_value] ,[corrections_value]
,[corrections_last_correction_date] ,[corrections_last_correction_date]
,[mileage_id] ,[mileage_id]
,[mileage_mileage] ,[mileage_mileage]
,[is_productive] ,[is_productive]
,[hours] ,[hours]
,[duration_in_minutes]
,[start_date] ,[start_date]
,[end_date] ,[end_date]
,[is_time_defined] ,[is_time_defined]
,[is_recurring] ,[is_recurring]
,[recurrence_id] ,[recurrence_id]
,[recurrence_rrule_dtstart] ,[recurrence_rrule_dtstart]
,[recurrence_rrule_freq] ,[recurrence_rrule_freq]
,[recurrence_rrule_until] ,[recurrence_rrule_until]
,[recurrence_rrule_count] ,[recurrence_rrule_count]
,[recurrence_rrule_interval] ,[recurrence_rrule_interval]
,[recurrence_rrule_wkst] ,[recurrence_rrule_wkst]
,[recurrence_rrule_byday] ,[recurrence_rrule_byday]
,[recurrence_rrule_bysetpos] ,[recurrence_rrule_bysetpos]
,[recurrence_update] ,[recurrence_update]
,[is_external] ,[is_external]
,[billable] ,[billable]
,[note] ,[note]
,[address_type]
,[address_line_1]
,[address_line_2]
,[address_postal_code]
,[address_province]
,[address_locality]
,[address_country_code]
,[address_country_id]
,[assignment_id]
,[should_sync_to_cronofy] ,[should_sync_to_cronofy]
,[source] ,[source]
FROM [dbo].[SP_HOURS_10_2022] FROM [dbo].[SP_HOURS_9_2022]

Het gebruik van een select * in combinatie met bijvoorbeeld een union wordt in de meeste kwaliteitsframeworks voor SQL afgeraden. Ook vanuit Invantive raden we dit sterk af.

Advies is om de kolommenlijst uit te schrijven (met als doel het minimum aantal kolommen) en select * en/of select * except ... in vaste code alleen te gebruiken indien de keten en versiebeheer goed onder controle zijn.

In dit geval is de waarschijnlijke oorzaak dat de kolommenlijst gewijzigd is van de onderliggende Simplicate SQL-tabel. In ieder geval is de kolommen- en/of tabellen-lijst van Simplicate gewijzigd in maart 2022 (Simplicate uitbreiding tabellen en kolommen) en mei 2024 (22 nieuwe Simplicate-tabellen).

Op andere platformen kan de kolommen- en of tabellenlijst zelfs dagelijks of nog frequenter wijzigen, bijvoorbeeld als er extra custom fields gedefinieerd worden.

Meer algemene tips voor de omgang met wijzigende datamodellen zijn te lezen in Dynamische datamodellen: hoe omgaan met doorlopend nieuwe tabellen en kolommen. Deze tips gelden ook voor platformen zoals Exact Online en Twinfield, ondanks hun relatief stabiel en statisch datamodel.

Dank voor de reactie.

Deze lijst kan ik uitschrijven, maar ik had verwacht dat deze nieuwe kolommen in alle periodes terug zouden komen. Zoals ik het nu terug krijg lijkt het alsof de nieuwe kolommen maar tot Oktober 2022 bestaan en daarna niet meer, zou dit kunnen kloppen?

Nee, de kolommenlijst is statisch voor een versie van de Invantive UniversalSQL-driver en de Simplicate-metadata.

Mogelijk dienen de tabellen opnieuw aangemaakt te worden met de huidige versies om de gewenste kolommenlijst te krijgen.

Dit topic is 3 dagen na het laatste antwoord automatisch gesloten. Nieuwe antwoorden zijn niet meer toegestaan.