• Hi Gary,

    Looking at your scenario a couple of key points came out

    1) Change data

    2) Schema changes

    3) Replication

    This sounds like synch services to me as you can

    1) Replicate in groups (goes towards customers only in phase 1)

    2) Trap changed data only (see http://msdn.microsoft.com/en-us/library/bb933994.aspx)

    3) Can deloy schema (see http://msdn.microsoft.com/en-us/library/bb726035(v=sql.100).aspx )

    4) This can be off line so can work in a disconnected environment

    While this may not be a standard use for synch services at first glance it does seem to fit the bill !

    Anyway - I hope this gives you some food for thought.

    Cheers

    Peter

    PS here is some same code for replicating a scope called "Core" - simple case with no schema changes

    private void core()

    {

    SqlConnection myConnectionLocal = new SqlConnection(XYZUtility.XYZConnectionString());

    SqlConnection myConnectionServer = new SqlConnection(XYZUtility.XYZReplicationString());

    DbSyncScopeDescription clientScope = SqlSyncDescriptionBuilder.GetDescriptionForScope("Core", null, "dbo", myConnectionServer);

    SqlSyncScopeProvisioning myClientScopeProvision = new SqlSyncScopeProvisioning(myConnectionLocal, clientScope);

    myClientScopeProvision.SetUseBulkProceduresDefault(true);

    if (!myClientScopeProvision.ScopeExists("Core"))

    {

    myClientScopeProvision.Apply();

    }

    SqlSyncProvider mySQLProviderLocal = new SqlSyncProvider("Core", myConnectionLocal);

    SqlSyncProvider mySQLProviderServer = new SqlSyncProvider("Core", myConnectionServer);

    mySQLProviderLocal.BatchingDirectory = Environment.ExpandEnvironmentVariables("%TEMP%");

    mySQLProviderServer.MemoryDataCacheSize = 50000;

    mySQLProviderLocal.MemoryDataCacheSize = 50000;

    mySQLProviderServer.ApplicationTransactionSize = 10000;

    SyncOrchestrator mySyncOrchestrator = new SyncOrchestrator();

    mySyncOrchestrator.LocalProvider = mySQLProviderLocal;

    mySyncOrchestrator.RemoteProvider = mySQLProviderServer;

    mySyncOrchestrator.Direction = SyncDirectionOrder.Download;

    SyncOperationStatistics myStats = mySyncOrchestrator.Synchronize();

    state.Text = state.Text + "\rCore data replication started at: " + myStats.SyncStartTime.ToString() + " and finished at :" + myStats.SyncEndTime.ToString();

    }

    I work for 1st Consulting, a small ISV based in the UK. We build web and desktop applications using the MSFT stack. Find us at www.1stconsulting.biz