Link Search Menu Expand Document

SqlServerStatementBuilder


This class is the BaseStatementBuilder-derived implementation for SQL Server, and is the default statement builder used by the library. It is automatically registered by SqlServerBootstrap — you do not need to instantiate it directly under normal use.

It generates [schema].[table]-quoted, @-parameterized T-SQL, and honors the hints argument (e.g. WITH (NOLOCK)) on every operation that accepts one — see SqlServerTableHints.

For Insert, InsertAll, Merge and MergeAll, the newly generated identity or primary key value is returned via SCOPE_IDENTITY() (single-row Insert) or an OUTPUT clause routed through a table variable (InsertAll/Merge/MergeAll) — the indirection through a table variable avoids SQL Server’s restriction against an OUTPUT clause on a target table that has enabled triggers.

BatchQuery and the internal skip/take query are built using a ROW_NUMBER() CTE rather than OFFSET/FETCH, so paging also works reliably against older compatibility levels.

Constructors

public SqlServerStatementBuilder(IDbSetting dbSetting)
public SqlServerStatementBuilder(IDbSetting dbSetting,
    IResolver<Field, IDbSetting, string> convertFieldResolver = null,
    IResolver<Type, Type> averageableClientTypeResolver = null)

convertFieldResolver defaults to SqlServerConvertFieldResolver, used to render CONVERT(...) expressions for typed fields.

Usability

Use StatementBuilderMapper to override it with a custom implementation.

StatementBuilderMapper.Add(typeof(SqlConnection), new MyCustomSqlServerStatementBuilder(dbSetting), true);