Compartir a través de


Actualizar scripts de replicación (programación de la replicación con Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Los archivos de script de Transact-SQL se pueden utilizar para configurar mediante programación una topología de replicación. Para obtener más información, consulte Replication System Stored Procedures Concepts (Conceptos sobre los procedimientos almacenados del sistema de replicación).

Importante

Aunque no necesita actualizar scripts ejecutados por miembros del rol sysadmin , se recomienda modificar los ya existentes tal como se describe en este tema. Especifique una cuenta que tenga permisos mínimos para cada agente de replicación tal como se describe en la sección sobre permisos requeridos por el agente del tema Replication Agent Security Model.

Estas mejoras de seguridad, que hacen posible un mayor control sobre los permisos permitiéndole especificar de manera explícita las cuentas Microsoft Windows bajo las cuales se ejecutan los trabajos del agente de replicación, afectan a los siguientes procedimientos almacenados de scripts existentes:

  • sp_addpublication_snapshot:

    Debería proporcionar ahora las credenciales de Windows como @job_login y @job_password al ejecutar sp_addpublication_snapshot (Transact-SQL) para crear el trabajo bajo el que el Agente de instantáneas se ejecuta en el distribuidor.

  • sp_addpushsubscription_agent:

    Debería ejecutar ahora sp_addpushsubscription_agent (Transact-SQL) para agregar de forma explícita un trabajo y proporcionar las credenciales de Windows (@job_login y @job_password) bajo las que se ejecuta el Agente de distribución en el distribuidor. En las versiones de SQL Server antes de SQL Server 2005 (9.x), esto se hacía automáticamente cuando se creaba una suscripción de inserción.

  • sp_addmergepushsubscription_agent:

    Debería ejecutar ahora sp_addmergepushsubscription_agent (Transact-SQL) para agregar de forma explícita un trabajo y proporcionar las credenciales de Windows (@job_login y @job_password) bajo las que se ejecuta el Agente de mezcla en el distribuidor. En las versiones de SQL Server antes de SQL Server 2005 (9.x), esto se hacía automáticamente cuando se creaba una suscripción de inserción.

  • sp_addpullsubscription_agent:

    Debería proporcionar ahora las credenciales de Windows como @job_login y @job_password al ejecutar sp_addpullsubscription_agent (Transact-SQL) para crear el trabajo bajo el que el Agente de distribución se ejecuta en el suscriptor.

  • sp_addmergepullsubscription_agent:

    Debería proporcionar ahora las credenciales de Windows como @job_login y @job_password al ejecutar sp_addmergepullsubscription_agent (Transact-SQL) para crear el trabajo bajo el que el Agente de mezcla se ejecuta en el suscriptor.

  • sp_addlogreader_agent:

    Debería ejecutar ahora sp_addlogreader_agent (Transact-SQL) para agregar manualmente el trabajo y proporcionar las credenciales de Windows bajo las que se ejecuta el Agente de registro del LOG en el distribuidor. En las versiones de SQL Server antes de SQL Server 2005 (9.x), esto se hacía automáticamente cuando se creaba una publicación transaccional.

  • sp_addqreader_agent:

    Debería ejecutar ahora sp_addqreader_agent (Transact-SQL) para agregar manualmente el trabajo y proporcionar las credenciales de Windows bajo las que se ejecuta el Agente de lectura de cola en el distribuidor. En las versiones de SQL Server antes de SQL Server 2005 (9.x), esto se hacía automáticamente cuando se creaba una publicación transaccional que admitía actualización en cola.

En el modelo de seguridad introducido en SQL Server 2005 (9.x), los agentes de replicación realizan siempre las conexiones a la instancia local de SQL Server con autenticación de Windows mediante las credenciales proporcionadas en @job_name y @job_password. Para obtener información sobre los requisitos de cuentas de Windows utilizadas al ejecutar los trabajos del Agente de replicación, vea Replication Agent Security Model.

Importante

Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si almacena las credenciales en un archivo de script, asegúrese de que dicho archivo está protegido.

Para actualizar scripts que configuran una instantánea o publicación transaccional

  1. En el script existente, antes de sp_addpublication (Transact-SQL), ejecute sp_addlogreader_agent (Transact-SQL) en el publicador de la base de datos de publicación. Especifique las credenciales de Windows con las que se ejecuta el Agente de registro del LOG para @job_name y @job_password. Si el agente va a usar la autenticación de SQL Server al conectarse al publicador, también debe especificar un valor de 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password. Con ello se crea un trabajo del Agente de registro del LOG para la base de datos de publicación.

    Nota:

    Este paso es solo para las publicaciones transaccionales y no se requiere para las publicaciones de instantáneas.

  2. (Opcional) Antes de sp_addpublication (Transact-SQL), ejecute sp_addqreader_agent (Transact-SQL) en el distribuidor de la base de datos de distribución. Especifique las credenciales de Windows con las que se ejecuta el Agente de lectura de cola para @job_name y @job_password. Con ello se crea un trabajo del Agente de lectura de cola para el distribuidor.

    Nota:

    Este paso solamente se requiere para las publicaciones transaccionales que admiten los suscriptores de actualización en cola.

  3. (Opcional) Actualice la ejecución de sp_addpublication (Transact-SQL) para establecer cualquier valor no predeterminado para los parámetros que implementan nuevas funcionalidades de replicación.

  4. Después de sp_addpublication (Transact-SQL), ejecute sp_addpublication_snapshot (Transact-SQL) en el publicador de la base de datos de publicación. Especifique @publication y las credenciales de Windows con las que se ejecuta el Agente de instantáneas para @job_name y @job_password. Si el agente va a usar la autenticación de SQL Server al conectarse al publicador, también debe especificar un valor de 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password. Esto crea un trabajo de Agente de instantáneas para la publicación.

  5. (Opcional) Actualice la ejecución de sp_addarticle (Transact-SQL) para establecer cualquier valor no predeterminado para los parámetros que implementan nuevas funcionalidades de replicación.

Para actualizar scripts que agregan suscripciones a una instantánea o publicación transaccional

  1. Después de ejecutar el procedimiento almacenado que crea la suscripción, asegúrese de que ejecuta el procedimiento almacenado que crea un trabajo de Agente de distribución para sincronizar la suscripción. El procedimiento almacenado que utilice dependerá del tipo de suscripción.

Para actualizar scripts que configuran una publicación de combinación

  1. (Opcional) En el script existente, actualice la ejecución de sp_addmergepublication (Transact-SQL) para establecer cualquier valor no predeterminado para los parámetros que implementan nuevas funcionalidades de la replicación.

  2. Después de sp_addmergepublication (Transact-SQL), ejecute sp_addpublication_snapshot (Transact-SQL) en el publicador de la base de datos de publicación. Especifique @publication y las credenciales de Windows con las que se ejecuta el Agente de instantáneas para @job_name y @job_password. Si el agente va a usar la autenticación de SQL Server al conectarse al publicador, también debe especificar un valor de 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password. Esto crea un trabajo de Agente de instantáneas para la publicación.

  3. (Opcional) Actualice la ejecución de sp_addmergearticle (Transact-SQL) para establecer cualquier valor no predeterminado para los parámetros que implementan nuevas funcionalidades de replicación.

Para actualizar scripts que agregan suscripciones a una publicación de combinación

  1. Después de ejecutar el procedimiento almacenado que crea la suscripción, asegúrese de que ejecuta el procedimiento almacenado que crea un trabajo de Agente de mezcla para sincronizar la suscripción. El procedimiento almacenado que utilice dependerá del tipo de suscripción.

Ejemplos

A Script de SQL Server 2000 para crear una publicación transaccional

A continuación, se muestra un ejemplo de un script de SQL Server 2000 (8.x) que crea una publicación transaccional para la tabla Product. Esta publicación admite la actualización inmediata con actualización en cola como conmutación por error. Los parámetros predeterminados se han quitado para mayor legibilidad.

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

B. Script de SQL Server 2005 y versiones posteriores para crear una publicación transaccional

A continuación, se muestra un ejemplo de actualización del script anterior, que crea una publicación transaccional, para ejecutarse correctamente para SQL Server 2005 (9.x) y las versiones posteriores. Esta publicación admite la actualización inmediata con actualización en cola como conmutación por error. Los valores predeterminados de los nuevos parámetros se ha declarado explícitamente.

Nota:

Las credenciales de Windows se proporcionan en el tiempo de ejecución mediante las variables de 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

C. Script de SQL Server 2000 para crear una publicación de combinación

A continuación, se muestra un ejemplo de un script de SQL Server 2000 (8.x) que crea una publicación de combinación para la tabla Customers. Los parámetros predeterminados se han quitado para mayor legibilidad.

-- 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

D. Script de SQL Server 2005 y versiones posteriores para crear una publicación de combinación

A continuación, se muestra un ejemplo del script anterior, que crea una publicación de combinación, actualizada para ejecutarse correctamente para SQL Server 2005 (9.x) y las versiones posteriores. Los valores predeterminados de los nuevos parámetros se ha declarado explícitamente.

Nota:

Las credenciales de Windows se proporcionan en el tiempo de ejecución mediante las variables de 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

E. Script de SQL Server 2000 para crear una suscripción de inserción para una publicación transaccional

A continuación, se muestra un ejemplo de un script de SQL Server 2000 (8.x) que crea una suscripción de inserción a una publicación transaccional. Los parámetros predeterminados se han quitado para mayor legibilidad.

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

F. Script de SQL Server 2005 y versiones posteriores para crear una suscripción de inserción para una publicación transaccional

A continuación, se muestra un ejemplo de actualización del script anterior, que crea una suscripción de inserción, para ejecutarse correctamente para SQL Server 2005 (9.x) y las versiones posteriores. Los valores predeterminados de los nuevos parámetros se ha declarado explícitamente.

Nota:

Las credenciales de Windows se proporcionan en el tiempo de ejecución mediante las variables de 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

G. Script de SQL Server 2000 para crear una suscripción de inserción para una publicación de combinación

A continuación, se muestra un ejemplo de un script de SQL Server 2000 (8.x) que crea una suscripción de inserción a una publicación de combinación. Los parámetros predeterminados se han quitado para mayor legibilidad.

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

H. Script de SQL Server 2005 y versiones posteriores para crear una suscripción de inserción para una publicación de combinación

A continuación, se muestra un ejemplo del script anterior, que crea una suscripción de inserción en una publicación de combinación, actualizado para ejecutarse correctamente para SQL Server 2005 (9.x) y las versiones posteriores. Los valores predeterminados de los nuevos parámetros se ha declarado explícitamente.

Nota:

Las credenciales de Windows se proporcionan en el tiempo de ejecución mediante las variables de 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

I. Script de SQL Server 2000 para crear una suscripción de extracción para una publicación transaccional

A continuación, se muestra un ejemplo de un script de SQL Server 2000 (8.x) que crea una suscripción de extracción a una publicación transaccional. Los parámetros predeterminados se han quitado para mayor legibilidad.

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

J. Script de SQL Server 2005 y versiones posteriores para crear una suscripción de extracción para una publicación transaccional

A continuación, se muestra un ejemplo de actualización del script anterior, que crea una suscripción de extracción, actualizado para ejecutarse correctamente para SQL Server 2005 (9.x) y las versiones posteriores. Los valores predeterminados de los nuevos parámetros se ha declarado explícitamente.

Nota:

Las credenciales de Windows se proporcionan en el tiempo de ejecución mediante las variables de 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

K. Script de SQL Server 2000 para crear una suscripción de extracción para una publicación de combinación

A continuación, se muestra un ejemplo de un script de SQL Server 2000 (8.x) que crea una suscripción de extracción a una publicación de combinación. Los parámetros predeterminados se han quitado para mayor legibilidad.

-- 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

L. Script de SQL Server 2005 y versiones posteriores para crear una suscripción de extracción para una publicación de combinación

A continuación, se muestra un ejemplo del script anterior, que crea una suscripción de extracción en una publicación de combinación, actualizado para ejecutarse correctamente para SQL Server 2005 (9.x) y las versiones posteriores. Los valores predeterminados de los nuevos parámetros se ha declarado explícitamente.

Nota:

Las credenciales de Windows se proporcionan en el tiempo de ejecución mediante las variables de 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