• Why would it be difficult? You can initially create the partitions, specifying more than you need.

    Then run this script regularly:-

    SELECT

    t.name AS TableName, i.name AS IndexName, p.partition_number, p.partition_id,

    i.data_space_id, f.function_id, f.type_desc, r.boundary_id, r.value AS BoundaryValue, p.rows

    FROM

    sys.tables AS t

    INNER JOIN

    sys.indexes AS i ON t.object_id = i.object_id

    INNER JOIN

    sys.partitions AS p ON i.object_id = p.object_id AND i.index_id = p.index_id

    INNER JOIN

    sys.partition_schemes AS s ON i.data_space_id = s.data_space_id

    INNER JOIN

    sys.partition_functions AS f ON s.function_id = f.function_id

    LEFT OUTER JOIN

    sys.partition_range_values AS r ON f.function_id = r.function_id AND r.boundary_id = p.partition_number

    WHERE

    t.name = 'YOUR TABLE NAME'

    AND

    i.type <= 1

    ORDER BY p.partition_number;

    This will show you all the partitions in the table. From this you can see which are in use.

    I would then build a stored procedure to add new partitions once the number of free partitions drops below a certain number.

    This would mean that your data inserts would never have to wait for a partition to be created.