public async ValueTask <int> StageBatch(IReadOnlyList <TimeoutData> timeouts, int batchNumber)
        {
            await SqlTQueueCreator.TruncateTable(connection, SqlConstants.TimeoutMigrationStagingTable, schema, databaseName);

            foreach (var timeout in timeouts)
            {
                stagingDataTable.Rows.Add(DictionarySerializer.Serialize(timeout.Headers), timeout.State, timeout.Time);
            }

            await using var transaction = (SqlTransaction) await connection.BeginTransactionAsync();

            using var sqlBulk = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction)
                  {
                      DestinationTableName = SqlConstants.TimeoutMigrationStagingTable,
                  };
            try
            {
                await sqlBulk.WriteToServerAsync(stagingDataTable);

                await transaction.CommitAsync();
            }
            catch (Exception e)
            {
                logger.LogError(e, $"Unable to bulk copy batch '{batchNumber}' to the staging table. Exception occured: {e.Message}");
                return(0);
            }
            finally
            {
                stagingDataTable.Clear();
            }

            return(timeouts.Count);
        }