• I was facing the same challenge. I am pasting abbreviated version of the code I use. It does seem to avoid generating full snapshot.

    --1. Declare some variables

    DECLARE @found_out INT,

    @publication_name SYSNAME = 'your_publication_name',

    @article_nameSYSNAME = 'your_table_name',

    --2. This part should only run if there is already existing article and we need to change it

    BEGIN

    -- Check if subscription exists and, if so, drop it first

    EXEC sp_helpsubscription @publication = @publication_name, @article = @article_name, @found = @found_out OUTPUT

    IF @found_out = 1

    BEGIN

    EXEC sp_dropsubscription @publication = @publication_name, @article = @article_name, @subscriber= 'all'

    END

    EXEC sp_droparticle @publication = @publication_name, @article = @article_name, @force_invalidate_snapshot = 1

    END

    --3. Add article back (or create it for the first time)

    EXEC sp_addarticle @publication = @publication_name,

    @article = @article_name,

    --- list any other desired options (this proc has a ton of parameters) ----

    @force_invalidate_snapshot = 1

    --4. Add subscription for our newly added article

    EXEC sp_addsubscription

    @publication = @publication_name,

    @subscriber = 'Subscriber_Server_Name',

    @destination_db = 'Subscriber_DB_Name',

    @subscription_type = N'Push',

    @article = @article_name,

    @sync_type = 'automatic',

    @update_mode = 'read only',

    @subscriber_type = 0,

    @reserved = 'Internal'

    --5. Kick-off snapshot

    EXEC sp_startpublication_snapshot @publication = @publication_name