Compartir a través de


Cómo actualizar scripts de replicación (programación de la replicación con Transact-SQL)

Los archivos de script Transact-SQL se pueden utilizar para configurar mediante programación una topología de replicación. Para obtener más información, vea Conceptos sobre los procedimientos almacenados del sistema de replicación. Si es miembro de la función fija del servidor sysadmin en SQL Server 2005 y ejecuta scripts de replicación creados en SQL Server 2000, los scripts se ejecutarán correctamente. Si es miembro de la función de base de datos fija db_owner u otra función, los scripts producirán los errores MSSQL_ENG021797 o MSSQL_ENG021798, y deberán actualizarse.

Nota de seguridadNota de seguridad

Aunque no necesita actualizar scripts ejecutados por miembros de la función 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 Modelo de seguridad del Agente de replicación.

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 explícitamente un trabajo y proporcionar las credenciales de Windows (@job_login y @job_password) bajo las que se ejecuta el trabajo del Agente de distribución en el distribuidor. En las versiones de SQL Server antes de SQL Server 2005, 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 manera explícita un trabajo y proporcionar las credenciales de Windows (@job_login y @job_password) bajo las que se ejecuta el trabajo del Agente de mezcla en el distribuidor. En las versiones de SQL Server antes de SQL Server 2005, 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 de manera manual el trabajo y proporcionar las credenciales de Windows bajo las que se ejecuta el trabajo del Agente de registro del LOG en el distribuidor. En las versiones de SQL Server antes de SQL Server 2005, 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 de manera manual el trabajo y proporcionar las credenciales de Windows bajo las que se ejecuta el trabajo del Agente de lectura de cola en el distribuidor. En las versiones de SQL Server antes de SQL Server 2005, 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, los agentes de replicación realizan siempre las conexiones con la instancia local de SQL Server con autenticación de Windows mediante las credenciales proporcionada 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 Modelo de seguridad del Agente de replicación.

Nota de seguridadNota de seguridad

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 @job_name y @job_password. Si el agente va a usar 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 sólo 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 @job_name y @job_password. Con ello se crea un trabajo del Agente de lectura de cola para el distribuidor.

    Nota

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

  3. (Opcional) Actualizar la ejecución de sp_addpublication (Transact-SQL) para establecer cualquier valor no predeterminado para los parámetros que implementan nuevas funcionalidades de la 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 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) Actualizar la ejecución de sp_addarticle (Transact-SQL) para establecer cualquier valor no predeterminado para los parámetros que implementan nuevas funcionalidades de la replicación.

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

Para actualizar scripts que configuran una publicación de mezcla

  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 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) Actualizar la ejecución de sp_addmergearticle (Transact-SQL) para establecer cualquier valor no predeterminado para los parámetros que implementan nuevas funcionalidades de la replicación.

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

Ejemplo

A continuación, se muestra un ejemplo de un script SQL Server 2000 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

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

A continuación, se muestra un ejemplo de un script SQL Server 2000 que crea una publicación de mezcla 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

A continuación, se muestra un ejemplo del script anterior, que crea una publicación de mezcla, actualizada para ejecutarse correctamente para SQL Server 2005 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 scripts 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

A continuación, se muestra un ejemplo de un script SQL Server 2000 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

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

A continuación, se muestra un ejemplo de un script SQL Server 2000 que crea una suscripción de inserción a una publicación de mezcla. 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

A continuación, se muestra un ejemplo del script anterior, que crea una suscripción de inserción en una publicación de mezcla, actualizado para ejecutarse correctamente para SQL Server 2005 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 scripts 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

A continuación, se muestra un ejemplo de un script SQL Server 2000 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

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

A continuación, se muestra un ejemplo de un script SQL Server 2000 que crea una suscripción de extracción a una publicación de mezcla. 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

A continuación, se muestra un ejemplo del script anterior, que crea una suscripción de extracción en una publicación de mezcla, actualizado para ejecutarse correctamente para SQL Server 2005 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 scripts 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