Procedura: Aggiornamento di script di replica (programmazione Transact-SQL della replica)

È possibile utilizzare i file script Transact-SQL per configurare a livello di programmazione una topologia di replica. Per ulteriori informazioni, vedere Concetti di base relativi alle stored procedure del sistema di replica. Se si è un membro del ruolo predefinito del server sysadmin in SQL Server 2005 e si eseguono gli script di replica creati con SQL Server 2000, gli script verranno eseguiti correttamente. Se si è un membro del ruolo predefinito del database db_owner o di un altro ruolo, l'esecuzione degli script avrà esito negativo e verrà restituito l'errore MSSQL_ENG021797 o MSSQL_ENG021798. È inoltre necessario aggiornare gli script.

Nota sulla sicurezzaNota sulla sicurezza

Sebbene non sia necessario aggiornare gli script eseguiti da membri del ruolo sysadmin, si consiglia di modificare gli script esistenti come descritto in questo argomento. Specificare un account con autorizzazioni minime per ogni agente di replica, come descritto nella sezione relativa alle autorizzazioni necessarie per gli agenti dell'argomento Modello di sicurezza dell'agente di replica.

Oltre a offrire un maggior controllo delle autorizzazioni, consentendo di specificare in modo esplicito gli account di Microsoft Windows in cui vengono eseguiti i processi dell'agente di replica, questi miglioramenti apportati alla protezione influiscono sulle seguenti stored procedure negli script esistenti:

  • sp_addpublication_snapshot

    È necessario specificare le credenziali di Windows come @job_login e @job_password durante l'esecuzione di sp_addpublication_snapshot (Transact-SQL) per creare il processo in cui viene eseguito l'agente snapshot nel server di distribuzione.

  • sp_addpushsubscription_agent

    È necessario eseguire sp_addpushsubscription_agent (Transact-SQL) per aggiungere in modo esplicito un processo e specificare le credenziali di Windows (@job_login e @job_password) utilizzate per l'esecuzione del processo dell'agente di distribuzione nel server di distribuzione. Nelle versioni di SQL Server precedenti a SQL Server 2005 tale operazione viene eseguita automaticamente al momento della creazione di una sottoscrizione push.

  • sp_addmergepushsubscription_agent

    È necessario eseguire sp_addmergepushsubscription_agent (Transact-SQL) per aggiungere in modo esplicito un processo e specificare le credenziali di Windows (@job_login e @job_password) utilizzate per l'esecuzione del processo dell'agente di merge nel server di distribuzione. Nelle versioni di SQL Server precedenti a SQL Server 2005 tale operazione viene eseguita automaticamente al momento della creazione di una sottoscrizione push.

  • sp_addpullsubscription_agent

    È necessario specificare le credenziali di Windows come @job_login e @job_password durante l'esecuzione di sp_addpullsubscription_agent (Transact-SQL) per creare il processo in cui viene eseguito l'agente di distribuzione nel Sottoscrittore.

  • sp_addmergepullsubscription_agent

    È necessario specificare le credenziali di Windows come @job_login e @job_password durante l'esecuzione di sp_addmergepullsubscription_agent (Transact-SQL) per creare il processo in cui viene eseguito l'agente di merge nel Sottoscrittore.

  • sp_addlogreader_agent

    È necessario eseguire sp_addlogreader_agent (Transact-SQL) per aggiungere in modo manuale il processo e specificare le credenziali di Windows utilizzate per l'esecuzione dell'agente di lettura log nel server di distribuzione. Nelle versioni di SQL Server precedenti a SQL Server 2005 tale operazione viene eseguita automaticamente al momento della creazione di una pubblicazione transazionale.

  • sp_addqreader_agent

    È necessario eseguire sp_addqreader_agent (Transact-SQL) per aggiungere in modo manuale il processo e specificare le credenziali di Windows utilizzate per l'esecuzione dell'agente di lettura coda nel server di distribuzione. Nelle versioni di SQL Server precedenti a SQL Server 2005 tale operazione viene eseguita automaticamente al momento della creazione di una pubblicazione transazionale con supporto dell'aggiornamento in coda.

Nel modello di protezione introdotto in SQL Server 2005 gli agenti di replica stabiliscono sempre le connessioni all'istanza locale di SQL Server con l'autenticazione di Windows, utilizzando le credenziali specificate in @job_name e @job_password. Per informazioni sui requisiti degli account di Windows utilizzati quando si eseguono processi dell'agente di replica, vedere Modello di sicurezza dell'agente di replica.

Nota sulla sicurezzaNota sulla sicurezza

Se possibile, richiedere agli utenti di immettere le credenziali di protezione in fase di esecuzione. Se si archiviano le credenziali in un file script, assicurarsi che quest'ultimo sia protetto.

Per aggiornare gli script di configurazione di una pubblicazione snapshot o transazionale

  1. Nello script esistente, prima di sp_addpublication (Transact-SQL), eseguire sp_addlogreader_agent (Transact-SQL) nel database di pubblicazione del server di pubblicazione. Specificare le credenziali di Windows utilizzate per l'esecuzione dell'agente di lettura log per @job_name e @job_password. Se l'agente utilizza l'autenticazione di SQL Server per la connessione al server di pubblicazione, è inoltre necessario specificare il valore 0 per @publisher_security_mode e le informazioni sull'account di accesso di SQL Server per @publisher_login e @publisher_password. Verrà creato un processo dell'agente di lettura log per il database di pubblicazione.

    Nota

    Questo passaggio è necessario solo per le pubblicazioni transazionali, non per le pubblicazioni snapshot.

  2. (Facoltativo) Prima di sp_addpublication (Transact-SQL), eseguire sp_addqreader_agent (Transact-SQL) nel database di distribuzione del server di distribuzione. Specificare le credenziali di Windows utilizzate per l'esecuzione dell'agente di lettura coda per @job_name e @job_password. Verrà creato un processo dell'agente di lettura coda per il server di distribuzione.

    Nota

    Questo passaggio è necessario solo per le pubblicazioni transazionali che supportano Sottoscrittori ad aggiornamento in coda.

  3. (Facoltativo) Aggiornare l'esecuzione di sp_addpublication (Transact-SQL) per impostare valori non predefiniti per i parametri che implementano nuove funzionalità di replica.

  4. Dopo sp_addpublication (Transact-SQL), eseguire sp_addpublication_snapshot (Transact-SQL) nel database di pubblicazione del server di pubblicazione. Specificare @publication e le credenziali di Windows utilizzate per l'esecuzione dell'agente snapshot per @job_name e @job_password. Se l'agente utilizza l'autenticazione di SQL Server per la connessione al server di pubblicazione, è inoltre necessario specificare il valore 0 per @publisher_security_mode e le informazioni sull'account di accesso di SQL Server per @publisher_login e @publisher_password. Verrà creato un processo dell'agente snapshot per la pubblicazione.

  5. (Facoltativo) Aggiornare l'esecuzione di sp_addarticle (Transact-SQL) per impostare valori non predefiniti per i parametri che implementano nuove funzionalità di replica.

Per aggiornare gli script per l'aggiunta di sottoscrizioni di una pubblicazione snapshot o transazionale

Per aggiornare gli script di configurazione di una pubblicazione di tipo merge

  1. (Facoltativo) Nello script esistente aggiornare l'esecuzione di sp_addmergepublication (Transact-SQL) per impostare valori non predefiniti per i parametri che implementano nuove funzionalità di replica.

  2. Dopo sp_addmergepublication (Transact-SQL), eseguire sp_addpublication_snapshot (Transact-SQL) nel database di pubblicazione del server di pubblicazione. Specificare @publication e le credenziali di Windows utilizzate per l'esecuzione dell'agente snapshot per @job_name e @job_password. Se l'agente utilizza l'autenticazione di SQL Server per la connessione al server di pubblicazione, è inoltre necessario specificare il valore 0 per @publisher_security_mode e le informazioni sull'account di accesso di SQL Server per @publisher_login e @publisher_password. Verrà creato un processo dell'agente snapshot per la pubblicazione.

  3. (Facoltativo) Aggiornare l'esecuzione di sp_addmergearticle (Transact-SQL) per impostare valori non predefiniti per i parametri che implementano nuove funzionalità di replica.

Per aggiornare gli script per l'aggiunta di sottoscrizioni di una pubblicazione di tipo merge

Esempio

Di seguito è riportato un esempio di uno script SQL Server 2000 per la creazione di una pubblicazione transazionale per la tabella Product. Questa pubblicazione supporta l'aggiornamento immediato sostituito dall'aggiornamento in coda come soluzione di failover. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

USE [Northwind]
GO

DECLARE @publication AS sysname
DECLARE @publicationDB AS sysname
DECLARE @article AS sysname
SET @publication = N'NwdProductTran'
SET @publicationDB = N'Northwind'
SET @article = N'Products'

-- Enable the replication database.
EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'publish', 
    @value = N'true'

-- Add the transactional publication.
EXEC sp_addpublication 
    @publication = @publication, 
    @sync_method = N'native', 
    @status = N'active', 
    @repl_freq = N'continuous', 
    @description = N'Transactional publication of Northwind.', 
    @allow_push = N'true', 
    @allow_pull = N'true', 
    @allow_sync_tran = N'true', 
    @autogen_sync_procs = N'true', 
    @allow_queued_tran = N'true'

-- Add a snapshot job.
EXEC sp_addpublication_snapshot 
    @publication = @publication

-- Add the transactional articles.
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_owner = N'dbo', 
    @source_object = @article, 
    @destination_table = @article, 
    @type = N'logbased', 
    @schema_option = 0x00000000000080F3, 
    @ins_cmd = N'CALL sp_MSins_Products', 
    @del_cmd = N'XCALL sp_MSdel_Products', 
    @upd_cmd = N'XCALL sp_MSupd_Products', 
    @auto_identity_range = N'false'
GO

Di seguito è riportato un esempio dello script precedente per la creazione di una pubblicazione transazionale, aggiornato in modo da essere eseguito correttamente in SQL Server 2005 e versioni successive. Questa pubblicazione supporta l'aggiornamento immediato sostituito dall'aggiornamento in coda come soluzione di failover. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante variabili di scripting sqlcmd.

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

-- Execute at the Distributor.
USE [distribution]

DECLARE @login AS sysname;
DECLARE @password AS sysname;
-- Specify the Windows account to run the Queue Reader Agent.
SET @login = $(Login); 
-- Pass the password at runtime.
SET @password = $(Password); 

-- Execute sp_addqreader_agent to create the Queue Reader Agent job. 
EXEC sp_addqreader_agent 
    @job_login = @login, 
    @job_password = @password;
GO

-- Execute at the Publisher.
USE [Northwind]
GO

DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @article AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdProductTran';
SET @publicationDB = N'Northwind';
SET @article = N'Products';
-- Specify the Windows account to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- Pass the password at runtime.
SET @password = $(Password); 

-- Enable the replication database.
EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'publish', 
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password, 
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Add the transactional publication.
EXEC sp_addpublication 
    @publication = @publication, 
    @sync_method = N'native', 
    @repl_freq = N'continuous', 
    @status = N'active',
    @description = N'Transactional publication of Northwind.', 
    @allow_push = N'true', 
    @allow_pull = N'true', 
    @allow_sync_tran = N'true', 
    @autogen_sync_procs = N'true', 
    @allow_queued_tran = N'true',
    @replicate_ddl = 1,
    @enabled_for_p2p = N'false';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Add a transactional article.
EXEC sp_addarticle 
  @publication = @publication, 
  @article = @article, 
  @source_owner = N'dbo', 
  @source_object = @article, 
  @destination_table = @article, 
  @type = N'logbased', 
  @schema_option = 0x00000000000080F3, 
  @ins_cmd = N'CALL sp_MSins_Products', 
  @del_cmd = N'XCALL sp_MSdel_Products', 
  @upd_cmd = N'XCALL sp_MSupd_Products', 
  @auto_identity_range = N'false',
  @identityrangemanagementoption = N'manual',
  @fire_triggers_on_snapshot = N'false';
GO

Di seguito è riportato un esempio di uno script SQL Server 2000 per la creazione di una pubblicazione di tipo merge per la tabella Customers. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

-- Enable the replication database.
USE [Northwind]
GO

DECLARE @publicationDB AS sysname
DECLARE @publication AS sysname
DECLARE @article AS sysname
SET @publicationDB = N'Northwind' 
SET @publication = N'NwdCustomersMerge' 
SET @article = N'Customers' 

EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'merge publish', 
    @value = N'true'

-- Add the merge publication.
EXEC sp_addmergepublication 
    @publication = @publication, 
    @description = N'Merge publication of Northwind.', 
    @retention = 14, 
    @sync_mode = N'native', 
    @centralized_conflicts = N'true', 
    @dynamic_filters = N'false', 
    @keep_partition_changes = N'false'

EXEC sp_addpublication_snapshot 
    @publication = @publication

-- Add the merge articles.
EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_owner = N'dbo', 
    @source_object = @article, 
    @type = N'table', 
    @description = null, 
    @column_tracking = N'true', 
    @schema_option = 0x000000000000CFF1
 GO

Di seguito è riportato un esempio dello script precedente per la creazione di una pubblicazione di tipo merge, aggiornato in modo da essere eseguito correttamente in SQL Server 2005 e versioni successive. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante variabili di scripting sqlcmd.

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

-- Enabling the replication database
-- Enable the replication database.
USE [Northwind]
GO

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'Northwind';
SET @publication = N'NwdCustomersMerge';
SET @article = N'Customers';
-- Specify the Windows account to run the Snapshot Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'merge publish', 
    @value = N'true';

-- Add the merge publication.
EXEC sp_addmergepublication 
    @publication = @publication, 
    @description = N'Merge publication of Northwind.', 
    @retention = 14, 
    @sync_mode = N'native', 
    @dynamic_filters = N'false', 
    @keep_partition_changes = N'false',
    -- Only set to '90RTM' if all Subscribers are SQL Server 2005.
    @publication_compatibility_level = N'90RTM',
    @replicate_ddl = 1,
    @allow_subscriber_initiated_snapshot = N'true',
    @allow_web_synchronization = N'false',
    @allow_partition_realignment = N'true',
    @retention_period_unit = N'day',
    @automatic_reinitialization_policy = 0,
    @conflict_logging = N'both';

EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login,
    @job_password = @password;

-- Add the merge article.
EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_owner = N'dbo', 
    @source_object = @article, 
    @type = N'table', 
    @description = null, 
    @column_tracking = N'true', 
    @schema_option = 0x0000000000034FD1,
    @partition_options = 0,
    @subscriber_upload_options = 0,
    @identityrangemanagementoption = N'manual',
    @delete_tracking = N'true',
    @compensate_for_errors = N'false',
    @stream_blob_columns = N'true';
GO

Di seguito è riportato un esempio di uno script SQL Server 2000 per la creazione di una sottoscrizione push di una pubblicazione transazionale. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'NwdProductTran' 
SET @subscriber = N'MYSUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
    @subscriber = @subscriber

-- Add a push subscription to a transactional publication.
USE [Northwind]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'push'
GO

Di seguito è riportato un esempio dello script precedente per la creazione di una sottoscrizione push di una pubblicazione transazionale, aggiornato in modo da essere eseguito correttamente in SQL Server 2005 e versioni successive. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante variabili di scripting sqlcmd.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdProductTran'; 
SET @subscriber = $(Subscriber); 
SET @subscriptionDB = N'NorthwindReplica'; 
-- Specify the Windows account to run the Distribution Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

-- Add a push subscription to a transactional publication.
USE [Northwind]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'push';

-- Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @job_login = @login, 
    @job_password = @password;
GO

Di seguito è riportato un esempio di uno script SQL Server 2000 per la creazione di una sottoscrizione push di una pubblicazione di tipo merge. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

DECLARE @publication AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @subscriber = N'SUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
  @subscriber = @subscriber

-- Add a push subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @subscriber_type = N'local',
  @sync_type = N'automatic'
GO

Di seguito è riportato un esempio dello script precedente per la creazione di una sottoscrizione push di una pubblicazione di tipo merge, aggiornato in modo da essere eseguito correttamente in SQL Server 2005 e versioni successive. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante variabili di scripting sqlcmd.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdCustomersMerge'; 
SET @subscriber = $(Subscriber); 
SET @subscriptionDB = N'NorthwindReplica'; 
-- Specify the Windows account to run the Merge Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

-- Add a push subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @subscription_type = N'push';

-- Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @job_login = @login, 
    @job_password = @password;
GO

Di seguito è riportato un esempio di uno script SQL Server 2000 per la creazione di una sottoscrizione pull di una pubblicazione transazionale. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

DECLARE @publication AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @subscriber = N'SUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
  @subscriber = @subscriber

-- Add a push subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @subscriber_type = N'local',
  @sync_type = N'automatic'
GO

Di seguito è riportato un esempio dello script precedente per la creazione di una sottoscrizione pull di una pubblicazione transazionale, aggiornato in modo da essere eseguito correttamente in SQL Server 2005 e versioni successive. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante variabili di scripting sqlcmd.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

-- Execute at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdProductTran'; 
SET @publisher = $(Publisher); 
SET @publicationDB = N'Northwind'; 
-- Specify the Windows account to run the Distribution Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [NorthwindReplica]
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB,
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication, 
    @distributor = @publisher,
    @job_login = @login,
    @job_password = @password;
GO

-- Execute at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'NwdProductTran'; 
SET @subscriber = $(Subscriber); 
SET @subscriptionDB = N'NorthwindReplica'; 

-- Add a pull subscription to a transactional publication.
USE [Northwind]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull';
GO

Di seguito è riportato un esempio di uno script SQL Server 2000 per la creazione di una sottoscrizione pull di una pubblicazione di tipo merge. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

-- Execute at the Subscriber
DECLARE @publication AS sysname
DECLARE @publisher AS sysname
DECLARE @publicationDB AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @publisher = N'PUBSERVER' 
SET @publicationDB = N'Northwind' 
SET @subscriber = N'SUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica'

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [NorthwindReplica]
EXEC sp_addmergepullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB

-- Add an agent job to synchronize the pull subscription. 
EXEC sp_addmergepullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @distributor = @publisher
GO

-- Execute at the Publisher.
DECLARE @publication AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @subscriber = N'MYSUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
  @subscriber = @subscriber

-- Add a pull subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'pull',
  @subscriber_type = N'local',
  @sync_type = N'automatic'
GO

Di seguito è riportato un esempio dello script precedente per la creazione di una sottoscrizione pull di una pubblicazione di tipo merge, aggiornato in modo da essere eseguito correttamente in SQL Server 2005 e versioni successive. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante variabili di scripting sqlcmd.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

-- Execute at the Subscriber
DECLARE @publication  AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdCustomersMerge'; 
SET @publisher = $(Publisher); 
SET @publicationDB = N'Northwind'; 
-- Specify the Windows account to run the Merge Agent.
SET @login = $(Login); 
-- Pass the password at runtime.
SET @password = $(Password); 

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [NorthwindReplica]
EXEC sp_addmergepullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription. 
EXEC sp_addmergepullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication,
  @distributor = @publisher,
  @job_login = @login,
  @job_password = @password;
GO

-- Execute at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'NwdCustomersMerge';
SET @subscriber = $(Subscriber);
SET @subscriptionDB = N'NorthwindReplica';

-- Add a pull subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'pull',
  @subscriber_type = N'local',
  @sync_type = N'automatic';
GO