SharePoint  

Difference Between Update(), UpdateOverwriteVersion(), and SystemUpdate() in SharePoint CSOM

When working with SharePoint list items using CSOM (Client-Side Object Model), you often need to update item properties — such as metadata or custom fields.

However, not all update methods behave the same way. The methods Update(), UpdateOverwriteVersion(), and SystemUpdate() look similar but have important differences that can affect version history, webhooks, and audit data.

1. Update()

What It Does

  • The most common way to update a SharePoint item.

  • Creates a new version of the item if versioning is enabled.

  • Updates the “Modified” and “Modified By” fields.

  • Triggers workflows, event receivers, and webhooks connected to the list.

item["Title"] = "Updated Title";
item.Update();
await context.ExecuteQueryRetryAsync();

When to Use

Use Update() when the change represents a real user edit — for example, a user modifying a field in a form or an automated process that should behave like a user edit.

ActionResult
Creates new version✅ Yes
Triggers webhooks/workflows✅ Yes
Updates “Modified” / “Modified By”✅ Yes

2. UpdateOverwriteVersion()

What It Does

  • Overwrites the existing version instead of creating a new one.

  • Still triggers workflows, events, and webhooks.

  • Updates the “Modified” and “Modified By” fields.

item["Title"] = "Corrected Title";
item.UpdateOverwriteVersion();
await context.ExecuteQueryRetryAsync();

When to Use

Use UpdateOverwriteVersion() when you need to make small corrections or metadata changes without cluttering version history, but still want your flows, webhooks, or event receivers to react.

ActionResult
Creates new version❌ No (overwrites current)
Triggers webhooks/workflows✅ Yes
Updates “Modified” / “Modified By”✅ Yes

3. SystemUpdate()

What It Does

  • Performs a silent update on the item.

  • Does not create a new version.

  • Does not trigger workflows, event receivers, or webhooks.

  • Does not change “Modified” or “Modified By” fields (unless you call SystemUpdate(true)).

item["InternalStatus"] = "Processed";
item.SystemUpdate(false);
await context.ExecuteQueryRetryAsync();

When to Use

Use SystemUpdate() when making background or system-level changes — such as updating a hidden metadata field, setting system flags, or post-processing items — where you don’t want users or automation to notice.

ActionResult
Creates new version❌ No
Triggers webhooks/workflows❌ No
Updates “Modified” / “Modified By”❌ No (unless true)

Conclusion

  • Update() → Normal user edit (new version, triggers flows)

  • UpdateOverwriteVersion() → Fix current version (still triggers flows)

  • SystemUpdate() → Silent update (no new version, no triggers)