SqlUpdateBuilder
SqlUpdateBuilder<T> builds parameterized UPDATE statements.
var result = new SqlUpdateBuilder<User>(new SqlServerDialect())
.Table("Users")
.Set(x => x.Name, "Bob")
.Set(x => x.IsActive, false)
.Where(w => w.EqualTo(x => x.Id, 42))
.Build();
// → UPDATE [Users] SET [Name] = @pu0, [IsActive] = @pu1 WHERE [Id] = @pw0
Safety: By default,
Build()throws if no WHERE clause is set. CallAllowUpdateAll()to explicitly allow updating all rows.
Table
Signature
SqlUpdateBuilder<T> Table(string tableName, string? schema = null)
Description Sets the target table name and optional schema.
Set
Signature
SqlUpdateBuilder<T> Set<TValue>(Expression<Func<T, TValue>> column, TValue value)
Description
Adds a parameterized SET clause. Parameters use the pu prefix.
Example
builder.Table("Users").Set(x => x.Name, "Bob").Set(x => x.IsActive, false);
// SET [Name] = @pu0, [IsActive] = @pu1
SetRaw
Signature
SqlUpdateBuilder<T> SetRaw(Expression<Func<T, object>> column, string rawExpression)
Description
Adds a raw (non-parameterized) SET clause. Use for server-side expressions like GETDATE() or arithmetic on existing values.
Example
builder.SetRaw(x => x.Counter, "Counter + 1");
// SET [Counter] = Counter + 1
builder.SetRaw(x => x.UpdatedAt, "GETDATE()");
// SET [UpdatedAt] = GETDATE()
SetColumn
Signature
SqlUpdateBuilder<T> SetColumn<TValue>(
Expression<Func<T, TValue>> target,
Expression<Func<T, TValue>> source)
Description Copies one column's current value to another column with no parameters.
Example
builder.SetColumn(x => x.NameBackup, x => x.Name);
// SET [NameBackup] = [Name]
Where (Update)
Three overloads are available — same semantics as SqlQueryBuilder:
SqlUpdateBuilder<T> Where(SqlWhereBuilder<T> whereBuilder)
SqlUpdateBuilder<T> Where(Action<SqlWhereBuilder<T>> configure)
SqlUpdateBuilder<T> Where(Expression<Func<T, bool>> predicate)
SqlUpdateBuilder<T> Where(ValiFlow<T> filter)
FromTable
Signature
SqlUpdateBuilder<T> FromTable(string sourceTable, string? alias = null)
Description Adds a FROM (SQL Server / PostgreSQL) or JOIN (MySQL) source table to the UPDATE statement, enabling multi-table updates. Throws on SQLite and Oracle.
Example
// SQL Server
builder.Table("Orders")
.Set(x => x.Status, "Shipped")
.FromTable("Shipments", "s")
.JoinOn("INNER JOIN", "[Shipments].[OrderId] = [Orders].[Id]")
.Where(x => x.Status == "Pending")
.Build();
// → UPDATE [Orders] SET [Status] = @pu0 FROM [Shipments] [s] INNER JOIN [Shipments].[OrderId] = [Orders].[Id]
// WHERE [Status] = @p0
JoinOn
Signature
SqlUpdateBuilder<T> JoinOn(string joinType, string onCondition)
Description
Adds a JOIN condition to the FROM clause of the UPDATE statement. Used with FromTable.
AllowUpdateAll
Signature
SqlUpdateBuilder<T> AllowUpdateAll()
Description Explicitly allows generating an UPDATE without a WHERE clause (affects all rows). Call only when a full-table update is intentional.
OutputUpdated
Signature
SqlUpdateBuilder<T> OutputUpdated()
Description
Appends OUTPUT INSERTED.* after SET. SQL Server only. Returns the updated rows' new values.
Returning (Update)
Signature
SqlUpdateBuilder<T> Returning(params Expression<Func<T, object>>[] columns)
Description
Appends RETURNING * or specified columns after WHERE. PostgreSQL / SQLite only.
Tag (Update)
Signature
SqlUpdateBuilder<T> Tag(string description)
Description Labels the query with a SQL comment.
Build (Update)
Signature
SqlQueryResult Build()
Description
Assembles and returns the final SqlQueryResult. Throws if no SET assignments are present or if no WHERE clause is set (unless AllowUpdateAll() was called).
Advanced Example
var update = new SqlUpdateBuilder<User>()
.Table("Users")
.Set(u => u.LastLoginAt, DateTime.UtcNow)
.Where(u => u.IsActive == true);