spMFUpdateTableinBatches

Return
  • 1 = Success

  • -1 = Error

Parameters
@MFTableName
  • Valid Class TableName as a string

  • Pass the class table name, e.g.: ‘MFCustomer’

@UpdateMethod INT
  • Default to 1 (From MF to SQL)

  • Set to 0 for updates from SQL to MF

@WithTableAudit Int
  • Default = 0 (table audit not included)

  • Set to 1 to trigger a table audit on the selected objids. Changes in M-Files will be overwritten by SQL.

@FromObjid BIGINT

Starting objid. Only applicable for updatemethod 1

@ToObjid BIGINT
  • End objid inclusive. Only applicable for updatemethod 1

  • Default = 1 000 000

@WithStats BIT
  • Default = 0 (false)

  • When true a log will be produced in the SSMS message window to show the progress

  • Set to 0 to suppress the messages.

@RetainDeletions BIT
  • Default = 0 (no)

  • Set to 1 to retain the deleted records in the class table

@ProcessBatch_ID (optional, output)

Referencing the ID of the ProcessBatch logging table

@Debug (optional)
  • Default = 0

  • 1 = Standard Debug Mode

Purpose

Procedure to update class table in batches

Additional Info

When updating a large number of records from a specific class in MF to SQL it is advisable to process these updates of large datasets in batches. Processing batches will ensure that a logical restart point can be determined in case of failure or to control the updating in large chunks. It will also keep the size of the dataset for transfer within the limits of the XML transfer file.

Prerequisites

It is good practice to provide the maximum object id in the Object Type + 500 as the @ToObjid instead of just working with the default of 100 000. One way to obtain the maximum is to use a view in M-Files on the Segment ID.

Warning

The FromObjid and ToObjid parameters is ignored when updatemethod = 0. These parameters are only used for updatemethod = 1.

When WithTableAudit is specified for updatemethod 0 then the latest version of the object will be determined for all objects with process_id 1. Where different, the update will not through a Synchronization error and any Changes in M-Files will be overwritten with the changes in SQL.

Examples

update SQL to MF

EXEC [dbo].[spMFUpdateTableinBatches] @MFTableName = 'YourTable'
                                     ,@UpdateMethod = 0
                                     ,@WithStats = 1
                                     ,@Debug = 0;

update SQL to MF - synchronization errors will be overwritten from SQL

EXEC [dbo].[spMFUpdateTableinBatches] @MFTableName = 'YourTable'
                                     ,@WithTableAudit = 1
                                     ,@UpdateMethod = 0
                                     ,@WithStats = 1
                                     ,@Debug = 0;

Update MF to SQL : class table initialisation (note the setting with @WithtableAudit)

EXEC [dbo].[spMFUpdateTableinBatches] @MFTableName = 'YourTable'
                                     ,@UpdateMethod = 1
                                     ,@WithTableAudit = 1
                                     ,@FromObjid = 1
                                     ,@ToObjid = 1000
                                     ,@WithStats = 1
                                     ,@Debug = 0;

Update MF to SQL : Retain the deleted objects in the class table

EXEC [dbo].[spMFUpdateTableinBatches] @MFTableName = 'YourTable'
                                     ,@UpdateMethod = 1
                                     ,@WithTableAudit = 1
                                     ,@FromObjid = 1
                                     ,@ToObjid = 1000
                                     ,@WithStats = 1
                                     ,@RetainDeletions = 1
                                     ,@Debug = 0;

Changelog

Date

Author

Description

2024-10-12

LC

Change default of @WithStats to 0

2024-04-10

LC

Use of WithTableAudit and updatemethod 0 will ignore synch errors and overwrite changes in MF

2024-04-10

LC

change approach for updatemethod 0 to work with id instead of objid

2024-01-26

LC

set ansi warning off

2024-01-26

LC

resolve not processing when only a new record is being processed

2023-12-08

LC

resolve issue when from to objid is used with updatemethod 0

2022-10-27

LC

add retaindeletions to spmfupdatetable processing

2021-08-25

LC

add output to the processbatch_id parameter

2021-05-03

LC

Fix bug to include first record of each batch

2020-09-24

LC

Set updatetable objids to include unmatched versions

2020-09-23

LC

Fix batch size calculation

2020-09-04

LC

Fix null count or set operation

2020-08-23

LC

Add parameter to retain deletions, default set to NO

2019-12-18

LC

include status flag 6 from AuditTable

2019-06-22

LC

substantially rebuilt to improve efficiencies

2019-08-05

LC

resolve issue with catching last object if new and only one object exist

2018-12-15

LC

Create procedure