static Query <object> CreateQuery(
                IDataContext dataContext,
                EntityDescriptor descriptor,
                [DisallowNull] T obj,
                InsertColumnFilter <T>?columnFilter,
                string?tableName,
                string?serverName,
                string?databaseName,
                string?schemaName,
                TableOptions tableOptions,
                Type type)
            {
                var sqlTable = new SqlTable(dataContext.MappingSchema, type);

                if (tableName != null)
                {
                    sqlTable.PhysicalName = tableName;
                }
                if (serverName != null)
                {
                    sqlTable.Server = serverName;
                }
                if (databaseName != null)
                {
                    sqlTable.Database = databaseName;
                }
                if (schemaName != null)
                {
                    sqlTable.Schema = schemaName;
                }
                if (tableOptions.IsSet())
                {
                    sqlTable.TableOptions = tableOptions;
                }

                var sqlQuery        = new SelectQuery();
                var insertStatement = new SqlInsertStatement(sqlQuery)
                {
                    Insert = { Into = sqlTable, WithIdentity = true }
                };

                var ei = new Query <object>(dataContext, null)
                {
                    Queries = { new QueryInfo {
                                    Statement = insertStatement,
                                } }
                };

                foreach (var field in sqlTable.Fields.Where(x => columnFilter == null || columnFilter(obj, x.ColumnDescriptor)))
                {
                    if (field.IsInsertable && !field.ColumnDescriptor.ShouldSkip(obj !, descriptor, SkipModification.Insert))
                    {
                        var param = GetParameter(type, dataContext, field);
                        ei.Queries[0].Parameters.Add(param);

                        insertStatement.Insert.Items.Add(new SqlSetExpression(field, param.SqlParameter));
                    }
            static Query <int> CreateQuery(
                IDataContext dataContext,
                EntityDescriptor descriptor,
                T obj,
                InsertColumnFilter <T>?columnFilter,
                string?tableName,
                string?serverName,
                string?databaseName,
                string?schemaName,
                TableOptions tableOptions,
                Type type)
            {
                var sqlTable = new SqlTable(dataContext.MappingSchema, type);

                if (tableName != null || schemaName != null || databaseName != null || databaseName != null)
                {
                    sqlTable.TableName = new(
                        tableName ?? sqlTable.TableName.Name,
                        Server  : serverName ?? sqlTable.TableName.Server,
                        Database : databaseName ?? sqlTable.TableName.Database,
                        Schema  : schemaName ?? sqlTable.TableName.Schema);
                }

                if (tableOptions.IsSet())
                {
                    sqlTable.TableOptions = tableOptions;
                }

                var insertStatement = new SqlInsertStatement {
                    Insert = { Into = sqlTable }
                };

                var ei = new Query <int>(dataContext, null)
                {
                    Queries = { new QueryInfo {
                                    Statement = insertStatement
                                } }
                };

                foreach (var field in sqlTable.Fields.Where(x => columnFilter == null || columnFilter(obj, x.ColumnDescriptor)))
                {
                    if (field.IsInsertable && !field.ColumnDescriptor.ShouldSkip(obj !, descriptor, SkipModification.Insert))
                    {
                        var param = GetParameter(type, dataContext, field);
                        ei.Queries[0].AddParameterAccessor(param);

                        insertStatement.Insert.Items.Add(new SqlSetExpression(field, param.SqlParameter));
                    }