Compartir a través de


sp_addmergepublication (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Crea una publicación de combinación nueva. Este procedimiento almacenado se ejecuta en el publicador de la base de datos que se publica.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_addmergepublication
    [ @publication = ] N'publication'
    [ , [ @description = ] N'description' ]
    [ , [ @retention = ] retention ]
    [ , [ @sync_mode = ] N'sync_mode' ]
    [ , [ @allow_push = ] N'allow_push' ]
    [ , [ @allow_pull = ] N'allow_pull' ]
    [ , [ @allow_anonymous = ] N'allow_anonymous' ]
    [ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
    [ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
    [ , [ @dynamic_filters = ] N'dynamic_filters' ]
    [ , [ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder' ]
    [ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
    [ , [ @pre_snapshot_script = ] N'pre_snapshot_script' ]
    [ , [ @post_snapshot_script = ] N'post_snapshot_script' ]
    [ , [ @compress_snapshot = ] N'compress_snapshot' ]
    [ , [ @ftp_address = ] N'ftp_address' ]
    [ , [ @ftp_port = ] ftp_port ]
    [ , [ @ftp_subdirectory = ] N'ftp_subdirectory' ]
    [ , [ @ftp_login = ] N'ftp_login' ]
    [ , [ @ftp_password = ] N'ftp_password' ]
    [ , [ @conflict_retention = ] conflict_retention ]
    [ , [ @keep_partition_changes = ] N'keep_partition_changes' ]
    [ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
    [ , [ @allow_synctoalternate = ] N'allow_synctoalternate' ]
    [ , [ @validate_subscriber_info = ] N'validate_subscriber_info' ]
    [ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
    [ , [ @max_concurrent_merge = ] max_concurrent_merge ]
    [ , [ @max_concurrent_dynamic_snapshots = ] max_concurrent_dynamic_snapshots ]
    [ , [ @use_partition_groups = ] N'use_partition_groups' ]
    [ , [ @publication_compatibility_level = ] N'publication_compatibility_level' ]
    [ , [ @replicate_ddl = ] replicate_ddl ]
    [ , [ @allow_subscriber_initiated_snapshot = ] N'allow_subscriber_initiated_snapshot' ]
    [ , [ @allow_web_synchronization = ] N'allow_web_synchronization' ]
    [ , [ @web_synchronization_url = ] N'web_synchronization_url' ]
    [ , [ @allow_partition_realignment = ] N'allow_partition_realignment' ]
    [ , [ @retention_period_unit = ] N'retention_period_unit' ]
    [ , [ @generation_leveling_threshold = ] generation_leveling_threshold ]
    [ , [ @automatic_reinitialization_policy = ] automatic_reinitialization_policy ]
    [ , [ @conflict_logging = ] N'conflict_logging' ]
[ ; ]

Argumentos

[ @publication = ] N'publication'

Nombre de la publicación de combinación que se va a crear. @publication es sysname, sin valor predeterminado y no debe ser la palabra clave ALL. El nombre de la publicación debe ser único en la base de datos.

[ @description = ] N'description'

Descripción de la publicación. @description es nvarchar(255), con un valor predeterminado de NULL.

[ @retention = ] retención

Período de retención, en unidades de período de retención, para los que se guardarán los cambios en el @publication especificado. @retention es int, con un valor predeterminado de 14. Las unidades de período de retención se definen mediante @retention_period_unit. Si la suscripción no está sincronizada dentro del período de retención y los cambios pendientes que habría recibido se quitarían mediante una operación de limpieza en el distribuidor, la suscripción expira y se debe reinicializar. El período de retención máximo admitido es el número de días entre el 31 de diciembre de 9999 y la fecha actual.

Nota:

El período de retención de las publicaciones de combinación tiene un período de gracia de 24 horas para incluir a los suscriptores en diferentes zonas horarias. Si, por ejemplo, se establece un período de retención de un día, el período de retención real será de 48 horas.

[ @sync_mode = ] N'sync_mode'

Modo de sincronización inicial de suscriptores a la publicación. @sync_mode es nvarchar(10) y puede ser uno de los siguientes valores.

Valor Descripción
native (valor predeterminado) Genera la salida de todas las tablas mediante un programa de copia masiva en modo nativo.
character Genera la salida de todas las tablas mediante un programa de copia masiva en modo de caracteres. Necesario para admitir suscriptores de SQL Server Compact y que no son de SQL Server.

[ @allow_push = ] N'allow_push'

Especifica si es posible crear suscripciones de inserción para la publicación indicada. @allow_push es nvarchar(5), con un valor predeterminado de true, que permite suscripciones de inserción en la publicación.

[ @allow_pull = ] N'allow_pull'

Especifica si es posible crear suscripciones de extracción para la publicación indicada. @allow_pull es nvarchar(5), con un valor predeterminado de true, que permite las suscripciones de extracción en la publicación. Debe especificar true para admitir suscriptores de SQL Server Compact.

[ @allow_anonymous = ] N'allow_anonymous'

Especifica si es posible crear suscripciones anónimas para la publicación indicada. @allow_anonymous es nvarchar(5), con un valor predeterminado de true, que permite suscripciones anónimas en la publicación. Para admitir suscriptores de SQL Server Compact, debe especificar true.

[ @enabled_for_internet = ] N'enabled_for_internet'

Especifica si la publicación está habilitada para Internet y determina si se puede utilizar el protocolo de transferencia de archivos (FTP) para transferir los archivos de instantánea a un suscriptor. @enabled_for_internet es nvarchar(5), con un valor predeterminado de false. Si truees , los archivos de sincronización de la publicación se colocan en el C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp directorio . El usuario debe crear el directorio Ftp. Si falsees , la publicación no está habilitada para el acceso a Internet.

[ @centralized_conflicts = ] N'centralized_conflicts'

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts. Use @conflict_logging para especificar la ubicación donde se almacenan los registros de conflicto.

[ @dynamic_filters = ] N'dynamic_filters'

Permite que la publicación de mezcla use filtros de filas con parámetros. @dynamic_filters es nvarchar(5), con un valor predeterminado de false.

Nota:

No debe especificar este parámetro, sino permitir que SQL Server determine automáticamente si se usan filtros de fila con parámetros. Si especifica un valor de true para @dynamic_filters, debe definir un filtro de fila parametrizado para el artículo. Para más información, consulte Definir y modificar un filtro de fila con parámetros para un artículo de mezcla.

[ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder'

Especifica si los archivos de instantánea se almacenan en la carpeta predeterminada. @snapshot_in_defaultfolder es nvarchar(5), con un valor predeterminado de true. Si truees , los archivos de instantánea se pueden encontrar en la carpeta predeterminada. Si falsees , los archivos de instantánea se almacenan en la ubicación alternativa especificada por @alternate_snapshot_folder. Las ubicaciones alternativas pueden estar en otro servidor, en una unidad de red o en un medio extraíble (como discos extraíbles). También puede guardar los archivos de instantáneas en un sitio FTP (Protocolo de transferencia de archivos), para que el suscriptor los recupere más tarde. Este parámetro puede ser true y seguir teniendo una ubicación especificada por @alt_snapshot_folder. Esta combinación especifica que los archivos de instantánea se almacenan en las ubicaciones predeterminadas y alternativas.

[ @alt_snapshot_folder = ] N'alt_snapshot_folder'

Especifica la ubicación de la carpeta alternativa de la instantánea. @alt_snapshot_folder es nvarchar(255), con un valor predeterminado de NULL.

[ @pre_snapshot_script = ] N'pre_snapshot_script'

Especifica un puntero a una .sql ubicación de archivo. @pre_snapshot_script es nvarchar(255), con un valor predeterminado de NULL. El Agente de mezcla ejecuta el script de instantánea previa antes de cualquiera de los scripts de objetos replicados al aplicar la instantánea en un suscriptor. El script se ejecuta en el contexto de seguridad utilizado por el Agente de mezcla durante la conexión con la base de datos de suscripciones. Los scripts de instantánea previa no se ejecutan en suscriptores de SQL Server Compact.

[ @post_snapshot_script = ] N'post_snapshot_script'

Especifica un puntero a una .sql ubicación de archivo. @post_snapshot_script es nvarchar(255), con un valor predeterminado de NULL. El Agente de mezcla ejecutará el script posterior a la instantánea después de que se apliquen los demás scripts y datos de objetos replicados durante una sincronización inicial. El script se ejecuta en el contexto de seguridad utilizado por el Agente de mezcla durante la conexión con la base de datos de suscripciones. Los scripts posteriores a la instantánea no se ejecutan en suscriptores de SQL Server Compact.

[ @compress_snapshot = ] N'compress_snapshot'

Especifica que la instantánea escrita en la ubicación @alt_snapshot_folder se comprimirá en el formato CAB de Microsoft. @compress_snapshot es nvarchar(5), con un valor predeterminado de false.

  • false especifica que la instantánea no se va a comprimir.

  • true especifica que la instantánea se comprimirá.

Los archivos de instantánea que tienen más de 2 GB no se pueden comprimir. Los archivos de instantáneas comprimidos se descomprimen en la ubicación en la que se ejecuta el Agente de mezcla; normalmente, se utilizan suscripciones de extracción con las instantáneas comprimidas para descomprimir los archivos en el suscriptor. La instantánea de la carpeta predeterminada no se puede comprimir. Para admitir suscriptores de SQL Server Compact, debe especificar false.

[ @ftp_address = ] N'ftp_address'

Dirección de red del servicio FTP para el distribuidor. @ftp_address es sysname, con un valor predeterminado de NULL. Especifica dónde se encuentran los archivos de instantáneas de publicación para el Agente de mezcla de un suscriptor que se va a recoger. Dado que esta propiedad se almacena para cada publicación, cada publicación puede tener una @ftp_address diferente. La publicación debe ser compatible con la propagación de instantáneas mediante FTP.

[ @ftp_port = ] ftp_port

Número de puerto del servicio FTP para el distribuidor. @ftp_port es int, con un valor predeterminado de 21. Especifica dónde se encuentran los archivos de instantánea de la publicación para que los recoja el Agente de mezcla de un suscriptor. Dado que esta propiedad se almacena para cada publicación, cada publicación puede tener su propia @ftp_port.

[ @ftp_subdirectory = ] N'ftp_subdirectory'

Especifica dónde están disponibles los archivos de instantáneas para que el Agente de mezcla del suscriptor se recoja si la publicación admite la propagación de instantáneas mediante FTP. @ftp_subdirectory es nvarchar(255), con un valor predeterminado de ftp. Dado que esta propiedad se almacena para cada publicación, cada publicación puede tener su propia @ftp_subdirctory o elegir no tener ningún subdirectorio, indicado con un NULL valor.

En la generación previa de instantáneas para publicaciones con filtros con parámetros, la instantánea de datos de cada partición del suscriptor debe estar en su propia carpeta. La estructura de directorios para las instantáneas generadas previamente mediante FTP debe ser la siguiente:

<alternate_snapshot_folder>\ftp\<publisher_publicationDB_publication>\<partitionID>.

Nota:

Los valores del ejemplo anterior (entre corchetes angulares) dependen de los detalles de la publicación y la partición del suscriptor.

[ @ftp_login = ] N'ftp_login'

Nombre de usuario usado para conectarse al servicio FTP. @ftp_login es sysname, con un valor predeterminado de anonymous.

[ @ftp_password = ] N'ftp_password'

Contraseña de usuario usada para conectarse al servicio FTP. @ftp_password es sysname, con un valor predeterminado de NULL.

Importante

No use una contraseña en blanco. Use una contraseña segura.

[ @conflict_retention = ] conflict_retention

Especifica el período de retención, expresado en días, durante el que se conservan los conflictos. @conflict_retention es int, con un valor predeterminado de días antes de 14 que se purgue la fila de conflictos de la tabla de conflictos.

[ @keep_partition_changes = ] N'keep_partition_changes'

Especifica si se deben habilitar las optimizaciones de cambio de partición cuando no se pueden usar particiones precaladas. @keep_partition_changes es nvarchar(5), con un valor predeterminado de true.

  • false significa que los cambios de partición no están optimizados y, cuando no se usan particiones precaladas, las particiones enviadas a todos los suscriptores se comprueban cuando cambian los datos en una partición.

  • true significa que los cambios de partición están optimizados y solo se ven afectados los suscriptores que tienen filas en las particiones modificadas.

Al usar particiones precaladas, establezca @use_partition_groups true en y establezca @keep_partition_changes en false. Para obtener más información, vea Filtros con parámetros: optimización para particiones precaladas.

Nota:

Si especifica un valor de true para @keep_partition_changes, especifique un valor de 1 para el parámetro -MaxNetworkOptimizationAgente de instantáneas . Para obtener más información sobre este parámetro, consulte Replicación Agente de instantáneas. Para obtener información sobre cómo especificar parámetros del agente, consulte Administración del agente de replicación.

Con los suscriptores de SQL Server Compact, @keep_partition_changes debe establecerse en true para asegurarse de que las eliminaciones se propagan correctamente. Cuando se establece en false, es posible que el suscriptor tenga más filas de las esperadas.

[ @allow_subscription_copy = ] N'allow_subscription_copy'

Habilita o deshabilita la funcionalidad de copia de las bases de datos de suscripciones suscritas a esta publicación. @allow_subscription_copy es nvarchar(5), con un valor predeterminado de false. El tamaño de la base de datos de suscripciones que se va a copiar debe ser inferior a 2 GB.

[ @allow_synctoalternate = ] N'allow_synctoalternate'

Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

[ @validate_subscriber_info = ] N'validate_subscriber_info'

Muestra las funciones que se usan para definir una partición de suscriptor de los datos publicados cuando se usan filtros de fila con parámetros. @validate_subscriber_info es nvarchar(500), con un valor predeterminado de NULL. El Agente de mezcla utiliza esta información para validar la partición del suscriptor. Por ejemplo, si se usa SUSER_SNAME en el filtro de fila con parámetros, el parámetro debe ser @validate_subscriber_info=N'SUSER_SNAME().

Nota:

No debe especificar este parámetro, sino permitir que SQL Server determine automáticamente el criterio de filtrado.

[ @add_to_active_directory = ] N'add_to_active_directory'

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts. Ya no puede agregar información de publicación a Microsoft Active Directory.

[ @max_concurrent_merge = ] max_concurrent_merge

Número máximo de procesos de mezcla simultáneos. @max_concurrent_merge es int, con un valor predeterminado de 0. Un valor de 0 para significa que no hay ningún límite para el número de procesos de combinación simultáneos que se ejecutan en un momento dado.

Esta propiedad establece un límite para el número de procesos de mezcla simultáneos que se pueden ejecutar con una publicación de combinación en un momento determinado. Si hay más procesos de combinación programados al mismo tiempo que el valor permitido para ejecutarse, el exceso de trabajos se coloca en una cola y espera hasta que finalice un proceso de combinación que se está ejecutando actualmente.

[ @max_concurrent_dynamic_snapshots = ] max_concurrent_dynamic_snapshots

Número máximo de sesiones del Agente de instantáneas que se pueden ejecutar simultáneamente para generar instantáneas de datos filtrados en particiones del suscriptor. @max_concurrent_dynamic_snapshots es int, con un valor predeterminado de 0. Si 0es , no hay ningún límite para las sesiones de instantáneas numéricas. Si hay más procesos de instantánea programados al mismo tiempo que el valor permitido para ejecutarse, el exceso de trabajos se coloca en una cola y espera hasta que finalice un proceso de instantánea que se está ejecutando actualmente.

[ @use_partition_groups = ] N'use_partition_groups'

Especifica que se deben usar particiones precalculadas para optimizar el proceso de sincronización. @use_partition_groups es nvarchar(5) y puede ser uno de estos valores:

Valor Descripción
true La publicación utiliza particiones previamente calculadas.
false La publicación no usa particiones precalutadas.
NULL (valor predeterminado) El sistema decide la estrategia de partición.

Las particiones precalculadas se utilizan de manera predeterminada. Para evitar el uso de particiones precaladas, @use_partition_groups debe establecerse falseen . Cuando NULL, el sistema decide si se pueden usar particiones precaladas. Si no se pueden usar particiones precaladas, este valor se convierte false eficazmente sin generar errores. En tales casos, @keep_partition_changes se puede establecer en true para proporcionar alguna optimización. Para obtener más información, vea Filtros con parámetros: filtros de fila con parámetros y filtros con parámetros: optimización para particiones precaladas.

[ @publication_compatibility_level = ] N'publication_compatibility_level'

Indica la compatibilidad con versiones anteriores de la publicación. @publication_compatibility_level es nvarchar(6) y puede ser uno de estos valores:

Valor Versión
90RTM SQL Server 2005 (9.x)
100RTM SQL Server 2008 (10.0.x)

[ @replicate_ddl = ] replicate_ddl

Indica si la publicación admite replicación de esquema. @replicate_ddl es int, con un valor predeterminado de NULL. 1 indica que las instrucciones del lenguaje de definición de datos (DDL) ejecutadas en el publicador se replican e 0 indica que las instrucciones DDL no se replican. Para más información, vea Realizar cambios de esquema en bases de datos de publicaciones.

El parámetro @replicate_ddl se respeta cuando una instrucción DDL agrega una columna. El parámetro @replicate_ddl se omite cuando una instrucción DDL modifica o quita una columna por los siguientes motivos.

  • Cuando se quita una columna, sysarticlecolumns se debe actualizar para evitar que las nuevas instrucciones DML incluyan la columna quitada que provocaría un error en el agente de distribución. El parámetro @replicate_ddl se omite porque la replicación siempre debe replicar el cambio de esquema.

  • Cuando se modifica una columna, es posible que el tipo de datos de origen o la nulabilidad hayan cambiado, lo que hace que las instrucciones DML contengan un valor que podría no ser compatible con la tabla en el suscriptor. Estas instrucciones DML pueden hacer que el agente de distribución genere un error. El parámetro @replicate_ddl se omite porque la replicación siempre debe replicar el cambio de esquema.

  • Cuando una instrucción DDL agrega una nueva columna, sysarticlecolumns no incluye la nueva columna. Las instrucciones DML no intentan replicar datos para la nueva columna. Se respeta el parámetro porque la DDL es aceptable se realice o no la replicación.

[ @allow_subscriber_initiated_snapshot = ] N'allow_subscriber_initiated_snapshot'

Indica si los suscriptores de esta publicación pueden iniciar el proceso de instantánea para generar instantáneas filtradas para su partición de datos. @allow_subscriber_initiated_snapshot es nvarchar(5), con un valor predeterminado de false. true indica que los suscriptores pueden iniciar el proceso de instantánea.

[ @allow_web_synchronization = ] N'allow_web_synchronization'

Especifica si la publicación se habilita para sincronización web. @allow_web_synchronization es nvarchar(5), con un valor predeterminado de false. true especifica que las suscripciones a esta publicación se pueden sincronizar a través de HTTPS. Para más información, consulte Web Synchronization for Merge Replication. Para admitir suscriptores de SQL Server Compact, debe especificar true.

[ @web_synchronization_url = ] N'web_synchronization_url'

Especifica el valor predeterminado de la dirección URL de Internet utilizada para la sincronización web. @web_synchronization_url es nvarchar(500), con un valor predeterminado de NULL. Define la dirección URL de Internet predeterminada si no se establece explícitamente cuando se ejecuta sp_addmergepullsubscription_agent .

[ @allow_partition_realignment = ] N'allow_partition_realignment'

Determina si se envían eliminaciones al suscriptor cuando una modificación de la fila del publicador provoca que se modifique su partición. @allow_partition_realignment es nvarchar(5), con un valor predeterminado de true.

  • true envía eliminaciones al suscriptor para reflejar los resultados de un cambio de partición quitando los datos que ya no forman parte de la partición del suscriptor.

  • false deja los datos de una partición antigua en el suscriptor, donde los cambios realizados en estos datos en el publicador no se replican en este suscriptor, pero los cambios realizados en el suscriptor se replican en el publicador.

Establecer @allow_partition_realignment en false se usa para conservar los datos de una suscripción de una partición antigua cuando los datos deben ser accesibles con fines históricos.

Nota:

Los datos que permanecen en el suscriptor como resultado de la configuración @allow_partition_realignment deben false tratarse como si fueran de solo lectura; sin embargo, el sistema de replicación no aplica esto.

[ @retention_period_unit = ] N'retention_period_unit'

Especifica las unidades para el período de retención establecido por @retention. @retention_period_unit es nvarchar(10) y puede ser uno de los valores siguientes.

Valor Versión
day (valor predeterminado) El período de retención se especifica en días.
week El período de retención se especifica en semanas.
month El período de retención se especifica en meses.
year El período de retención se especifica en años.

[ @generation_leveling_threshold = ] generation_leveling_threshold

Especifica el número de cambios contenidos en una generación. Una generación es una colección de cambios que se entregan a un publicador o suscriptor. @generation_leveling_threshold es int, con un valor predeterminado de 1000.

[ @automatic_reinitialization_policy = ] automatic_reinitialization_policy

Especifica si los cambios se cargan desde el suscriptor antes de una reinicialización automática requerida por un cambio en la publicación, donde se especificó un valor de 1 para @force_reinit_subscription. @automatic_reinitialization_policy es bit, con un valor predeterminado de 0.

1 significa que los cambios se cargan desde el suscriptor antes de que se produzca una reinicialización automática.

Importante

Si agrega, quita o cambia un filtro con parámetros, los cambios pendientes en el suscriptor no se pueden cargar en el publicador durante la reinicialización. Si desea cargar los cambios pendientes, sincronice todas las suscripciones antes de cambiar el filtro.

[ @conflict_logging = ] N'conflict_logging'

Especifica dónde se almacenan los registros conflictivos. @conflict_logging es nvarchar(15) y puede ser uno de los siguientes valores:

Valor Descripción
publisher Los registros de conflictos se almacenan en el publicador.
subscriber Los registros de conflictos se almacenan en el suscriptor que causó el conflicto. No se admite para suscriptores de SQL Server Compact.
both Los registros de conflictos se almacenan tanto en el publicador como en el suscriptor.
NULL (valor predeterminado) La replicación establece automáticamente @conflict_logging cuando both el valor @publication_compatibility_level es 90RTM y en publisher todos los demás casos.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

sp_addmergepublication se usa en la replicación de mezcla.

Para enumerar objetos de publicación en Active Directory mediante el parámetro @add_to_active_directory , el objeto de SQL Server ya debe crearse en Active Directory.

Si existen varias publicaciones que publican el mismo objeto de base de datos, solo las publicaciones con un valor @replicate_ddl de 1 las instrucciones de replicación ALTER TABLE, ALTER VIEW, ALTER PROCEDURE, ALTER FUNCTIONy ALTER TRIGGER DDL. Sin embargo, todas las publicaciones que publican la columna quitada replicarán una ALTER TABLE DROP COLUMN instrucción DDL.

En el caso de los suscriptores de SQL Server Compact, el valor de @alternate_snapshot_folder solo se usa cuando el valor de @snapshot_in_default_folder es false.

Con la replicación DDL habilitada (@replicate_ddl = 1) para una publicación, con el fin de realizar cambios de DDL que no se replican en la publicación, sp_changemergepublication primero debe ejecutarse para establecer @replicate_ddl en 0. Una vez emitidas las instrucciones DDL que no son de replicación, sp_changemergepublication se puede volver a ejecutar para volver a activar la replicación DDL.

Ejemplos

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

--Declarations for adding a merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022'; 
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @login = $(Login);
SET @password = $(Password);

-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption 
  @dbname=@publicationDB, 
  @optname=N'merge publish',
  @value = N'true' 

-- Create a new merge publication, explicitly setting the defaults. 
USE [AdventureWorks2022]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks2022.',
  @publication_compatibility_level  = N'120RTM';

-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = @login, 
  @job_password = @password;
GO

Permisos

Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_addmergepublication.