Partilhar via


sp_addmergepublication (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

Cria uma nova publicação de mesclagem. Esse procedimento armazenado é executado no Publicador, no banco de dados que está sendo publicado.

Convenções de sintaxe de Transact-SQL

Sintaxe

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'publicação'

O nome da publicação de mesclagem a ser criada. @publication é sysname, sem padrão, e não deve ser a palavra-chave ALL. O nome da publicação deve ser exclusivo no banco de dados.

@description [ = ] N'descrição'

A descrição da publicação. @description é nvarchar(255), com um padrão de NULL.

@retention [ = ] retenção

O período de retenção, em unidades de período de retenção, para o qual gravar as modificações para o @publication determinado. @retention é int, com um padrão de 14. As unidades de período de retenção são definidas por @retention_period_unit. Se a assinatura não for sincronizada dentro do período de retenção e as alterações pendentes que ela teria recebido forem removidas por uma operação de limpeza no Distribuidor, a assinatura expirará e deverá ser reinicializada. O período máximo de retenção permitido é o número de dias entre 31 de dezembro de 9999 e a data atual.

Observação

O período de retenção para publicações de mesclagem tem um período de tolerância de 24 horas para incluir os Assinantes em fusos horários diferentes. Por exemplo, se você definir um período de retenção de um dia, o período de retenção real será de 48 horas.

@sync_mode [ = ] N'sync_mode'

O modo de sincronização inicial de assinantes para a publicação. @sync_mode é nvarchar(10) e pode ser um dos seguintes valores.

Valor Descrição
native (padrão) Produz saída de programa de cópia em massa em modo nativo de todas as tabelas.
character Produz saída de programa de cópia em massa em modo de caractere de todas as tabelas. Necessário para dar suporte a Assinantes do SQL Server Compact e não SQL Server.

@allow_push [ = ] N'allow_push'

Especifica se podem ser criadas assinaturas push para a publicação determinada. @allow_push é nvarchar(5), com um padrão de true, que permite assinaturas push na publicação.

@allow_pull [ = ] N'allow_pull'

Especifica se podem ser criadas assinaturas pull para a publicação determinada. @allow_pull é nvarchar(5), com um padrão de true, que permite assinaturas pull na publicação. Você deve especificar true para dar suporte a Assinantes do SQL Server Compact.

@allow_anonymous [ = ] N'allow_anonymous'

Especifica se podem ser criadas assinaturas anônimas para a publicação determinada. @allow_anonymous é nvarchar(5), com um padrão de true, que permite assinaturas anônimas na publicação. Para oferecer suporte a Assinantes do SQL Server Compact, você deve especificar trueo .

@enabled_for_internet [ = ] N'enabled_for_internet'

Especifica se a publicação está habilitada para a Internet, e determina se o protocolo FTP pode ser usado para transferir os arquivos de instantâneo para um assinante. @enabled_for_internet é nvarchar(5), com um padrão de false. Se true, os arquivos de sincronização da publicação serão colocados no C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp diretório. O usuário deve criar o diretório Ftp. Se false, a publicação não está habilitada para acesso à Internet.

@centralized_conflicts [ = ] N'centralized_conflicts'

Esse parâmetro foi preterido e é mantido para compatibilidade com versões anteriores de scripts. Use @conflict_logging para especificar o local onde os registros de conflito são armazenados.

@dynamic_filters [ = ] N'dynamic_filters'

Permite que a publicação de mesclagem use filtros de linha com parâmetros. @dynamic_filters é nvarchar(5), com um padrão de false.

Observação

Você não deve especificar esse parâmetro, mas permitir que o SQL Server determine automaticamente se os filtros de linha com parâmetros estão sendo usados. Se você especificar um valor de para @dynamic_filters, deverá definir um filtro de linha parametrizado true para o artigo. Para obter mais informações, consulte Definir e modificar um filtro de linha com parâmetros para um artigo de mesclagem.

@snapshot_in_defaultfolder [ = ] N'snapshot_in_defaultfolder'

Especifica se os arquivos de instantâneo são armazenados na pasta padrão. @snapshot_in_defaultfolder é nvarchar(5), com um padrão de true. Se true, os arquivos de instantâneo podem ser encontrados na pasta padrão. Se false, os arquivos de instantâneo serão armazenados no local alternativo especificado pelo @alternate_snapshot_folder. Os locais alternativos podem estar em outro servidor, em uma unidade de rede ou em uma mídia removível (como discos removíveis). Você também pode salvar os arquivos de instantâneo em um site de FTP para recuperação posterior pelo Assinante. Esse parâmetro pode ser verdadeiro e ainda ter um local especificado por @alt_snapshot_folder. Essa combinação especifica que os arquivos de instantâneo são armazenados nos locais padrão e alternativo.

@alt_snapshot_folder [ = ] N'alt_snapshot_folder'

Especifica o local da pasta alternativa para o instantâneo. @alt_snapshot_folder é nvarchar(255), com um padrão de NULL.

@pre_snapshot_script [ = ] N'pre_snapshot_script'

Especifica um ponteiro para um local de .sql arquivo. @pre_snapshot_script é nvarchar(255), com um padrão de NULL. O Merge Agent executa o script de pré-instantâneo antes de qualquer um dos scripts de objeto replicados ao aplicar o instantâneo em um Assinante. O script é executado no contexto de segurança usado pelo Agente de Mesclagem ao se conectar ao banco de dados de assinatura. Os scripts de pré-instantâneo não são executados em Assinantes do SQL Server Compact.

@post_snapshot_script [ = ] N'post_snapshot_script'

Especifica um ponteiro para um local de .sql arquivo. @post_snapshot_script é nvarchar(255), com um padrão de NULL. O Agente de Mesclagem executará o script pós-instantâneo depois que todos os outros scripts de objeto replicado tenham sido aplicados durante uma sincronização inicial. O script é executado no contexto de segurança usado pelo Agente de Mesclagem ao se conectar ao banco de dados de assinatura. Os scripts pós-instantâneo não são executados em Assinantes do SQL Server Compact.

@compress_snapshot [ = ] N'compress_snapshot'

Especifica que o instantâneo gravado no local @alt_snapshot_folder será compactado no formato CAB da Microsoft. @compress_snapshot é nvarchar(5), com um padrão de false.

  • false Especifica que o snapshot não deve ser compactado.

  • true Especifica que o snapshot será compactado.

Arquivos de instantâneo maiores que 2 GB não podem ser compactados. Arquivos de instantâneo compactados são descompactados no local onde o Agente de Mesclagem é executado; as assinaturas pull são geralmente usadas com instantâneos compactados para que os arquivos sejam descompactados no Assinante. O instantâneo na pasta padrão não pode ser compactado. Para oferecer suporte a Assinantes do SQL Server Compact, você deve especificar falseo .

@ftp_address [ = ] N'ftp_address'

O endereço de rede do serviço FTP para o Distribuidor. @ftp_address é sysname, com um padrão de NULL. Especifica onde os arquivos de instantâneo de publicação estão localizados para o Merge Agent de um assinante selecionar. Como essa propriedade é armazenada para cada publicação, cada publicação pode ter um @ftp_address diferente. A publicação deve oferecer suporte à propagação de instantâneos por meio de FTP.

@ftp_port [ = ] ftp_port

O número da porta do serviço FTP do Distribuidor. @ftp_port é int, com um padrão de 21. Especifica onde os arquivos de instantâneo de publicação ficam localizados para serem captados pelo Agente de Mesclagem ou por um Assinante. Como essa propriedade é armazenada para cada publicação, cada publicação pode ter seu próprio @ftp_port.

@ftp_subdirectory [ = ] N'ftp_subdirectory'

Especifica onde os arquivos de instantâneo estão disponíveis para o Merge Agent do assinante selecionar se a publicação oferecer suporte à propagação de instantâneos usando FTP. @ftp_subdirectory é nvarchar(255), com um padrão de ftp. Como essa propriedade é armazenada para cada publicação, cada publicação pode ter seu próprio @ftp_subdirctory ou optar por não ter nenhum subdiretório, indicado com um NULL valor.

Na pré-geração de instantâneos para publicação com filtros com parâmetros, o instantâneo de dados de cada partição de Assinante precisa estar em sua própria pasta. A estrutura de diretório para instantâneos pré-gerados por meio de FTP deve seguir a estrutura a seguir:

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

Observação

Os valores no exemplo anterior (entre colchetes angulares) dependem das especificidades da publicação e da partição do Assinante.

@ftp_login [ = ] N'ftp_login'

O nome de usuário usado para se conectar ao serviço FTP. @ftp_login é sysname, com um padrão de anonymous.

@ftp_password [ = ] N'ftp_password'

A senha do usuário usada para se conectar ao serviço FTP. @ftp_password é sysname, com um padrão de NULL.

Importante

Não use uma senha em branco. Use uma senha forte.

@conflict_retention [ = ] conflict_retention

Especifica o período de retenção, em dias, durante o qual os conflitos são retidos. @conflict_retention é int, com um padrão de dias antes que a linha de 14 conflito seja removida da tabela de conflitos.

@keep_partition_changes [ = ] N'keep_partition_changes'

Especifica se as otimizações de alteração de partição devem ser habilitadas quando as partições pré-computadas não podem ser usadas. @keep_partition_changes é nvarchar(5), com um padrão de true.

  • false significa que as alterações de partição não são otimizadas e, quando as partições pré-computadas não são usadas, as partições enviadas a todos os Assinantes são verificadas quando os dados são alterados em uma partição.

  • true significa que as alterações de partição são otimizadas e somente os Assinantes com linhas nas partições alteradas são afetados.

Ao usar partições pré-computadas, defina @use_partition_groups como e defina @keep_partition_changes como false.true Para obter mais informações, consulte Filtros parametrizados – Otimizar para partições pré-computadas.

Observação

Se você especificar um valor de true para @keep_partition_changes, especifique um valor de 1 para o parâmetro -MaxNetworkOptimizationSnapshot Agent . Para obter mais informações sobre esse parâmetro, consulte Agente de instantâneo de replicação. Para obter informações sobre como especificar parâmetros de agente, consulte Administração do Replication Agent.

Com os assinantes do SQL Server Compact, @keep_partition_changes deve ser definido como true para garantir que as exclusões sejam propagadas corretamente. Quando definido como false, o assinante pode ter mais linhas do que o esperado.

@allow_subscription_copy [ = ] N'allow_subscription_copy'

Habilita ou desabilita a capacidade para copiar os bancos de dados de assinatura que assinam essa publicação. @allow_subscription_copy é nvarchar(5), com um padrão de false. O tamanho do banco de dados de assinatura que está sendo copiado deve ser inferior a 2 GB.

@allow_synctoalternate [ = ] N'allow_synctoalternate'

Identificado apenas para fins informativos. Não há suporte. A compatibilidade futura não está garantida.

@validate_subscriber_info [ = ] N'validate_subscriber_info'

Lista as funções usadas para definir uma partição de Assinante dos dados publicados quando filtros de linha com parâmetros são usados. @validate_subscriber_info é nvarchar(500), com um padrão de NULL. Essa informação é usada pelo Agente de Mesclagem para validar a partição do Assinante. Por exemplo, se SUSER_SNAME for usado no filtro de linha parametrizado, o parâmetro deverá ser @validate_subscriber_info=N'SUSER_SNAME().

Observação

Você não deve especificar esse parâmetro, mas permitir que o SQL Server determine automaticamente o critério de filtragem.

@add_to_active_directory [ = ] N'add_to_active_directory'

Esse parâmetro foi preterido e é mantido para compatibilidade com versões anteriores de scripts. Você não pode mais adicionar informações de publicação ao Microsoft Active Directory.

@max_concurrent_merge [ = ] max_concurrent_merge

O número máximo de processos de mesclagem simultâneos. @max_concurrent_merge é int, com um padrão de 0. Um valor de 0 for significa que não há limite para o número de processos de mesclagem simultâneos em execução a qualquer momento.

Essa propriedade define um limite para o número de processos de mesclagem simultâneos que pode ser executado em uma publicação de mesclagem de uma vez. Se houver mais processos de mesclagem agendados ao mesmo tempo do que o valor permitido para execução, os trabalhos excedentes serão colocados em uma fila e aguardarão até que um processo de mesclagem em execução no momento seja concluído.

@max_concurrent_dynamic_snapshots [ = ] max_concurrent_dynamic_snapshots

O número máximo de sessões de Agente de Instantâneo que podem ser executadas simultaneamente para gerar instantâneos de dados filtrados para partições de Assinante. @max_concurrent_dynamic_snapshots é int, com um padrão de 0. Se 0, não há limite para o número de sessões de snapshot. Se houver mais processos de instantâneo agendados ao mesmo tempo do que o valor permitido para execução, os trabalhos em excesso serão colocados em uma fila e aguardarão até que um processo de instantâneo em execução no momento seja concluído.

@use_partition_groups [ = ] N'use_partition_groups'

Especifica se as partições pré-computadas devem ser usadas para otimizar o processo de sincronização. @use_partition_groups é nvarchar(5) e pode ser um destes valores:

Valor Descrição
true A publicação usa partições pré-computadas.
false A publicação não usa partições pré-computadas.
NULL (padrão) O sistema escolhe a estratégia de particionamento.

Partições pré-computadas são usadas por padrão. Para evitar o uso de partições pré-computadas, @use_partition_groups deve ser definido como false. Quando NULL, o sistema decide se as partições pré-computadas podem ser usadas. Se as partições pré-computadas não puderem ser usadas, esse valor se tornará false efetivamente sem gerar erros. Nesses casos, @keep_partition_changes pode ser definido como true para fornecer alguma otimização. Para obter mais informações, consulte Filtros com parâmetros - Filtros de linha com parâmetros e Filtros com parâmetros - Otimizar para partições pré-computadas.

@publication_compatibility_level [ = ] N'publication_compatibility_level'

Indica a compatibilidade com versões anteriores da publicação. @publication_compatibility_level é nvarchar(6) e pode ser um destes valores:

Valor Versão
90RTM SQL Server 2005 (9.x)
100RTM SQL Server 2008 (10.0.x)

@replicate_ddl [ = ] replicate_ddl

Indica se há suporte para replicação de esquema para a publicação. @replicate_ddl é int, com um padrão de NULL. 1 indica que as instruções DDL (linguagem de definição de dados) executadas no editor são replicadas e 0 indica que as instruções DDL não são replicadas. Para obter mais informações, consulte Make Schema Changes on Publication Databases (Fazer alterações de esquema em bancos de dados de publicação).

O parâmetro @replicate_ddl é respeitado quando uma instrução DDL adiciona uma coluna. O parâmetro @replicate_ddl é ignorado quando uma instrução DDL altera ou descarta uma coluna pelos seguintes motivos.

  • Quando uma coluna é descartada, sysarticlecolumns deve ser atualizada para impedir que novas instruções DML incluam a coluna descartada que causaria a falha do agente de distribuição. O parâmetro @replicate_ddl é ignorado porque a replicação sempre deve replicar a alteração de esquema.

  • Quando uma coluna é alterada, o tipo de dados de origem ou a nulidade podem ter sido alterados, fazendo com que as instruções DML contenham um valor que pode não ser compatível com a tabela no assinante. Estas instruções DML podem causar falha no agente de distribuição. O parâmetro @replicate_ddl é ignorado porque a replicação sempre deve replicar a alteração de esquema.

  • Quando uma instrução DDL adiciona uma nova coluna, sysarticlecolumns não inclui a nova coluna. As instruções DML não tentam replicar dados para a nova coluna. O parâmetro é honrado porque replicar ou não replicar o DDL são aceitáveis.

@allow_subscriber_initiated_snapshot [ = ] N'allow_subscriber_initiated_snapshot'

Indica se os assinantes dessa publicação podem iniciar o processo de instantâneo para gerar o instantâneo filtrado para sua partição de dados. @allow_subscriber_initiated_snapshot é nvarchar(5), com um padrão de false. true indica que os Assinantes podem iniciar o processo de snapshot.

@allow_web_synchronization [ = ] N'allow_web_synchronization'

Especifica se a publicação está habilitada para sincronização da Web. @allow_web_synchronization é nvarchar(5), com um padrão de false. true especifica que as assinaturas dessa publicação podem ser sincronizadas por HTTPS. Para obter mais informações, consulte Web Synchronization for Merge Replication. Para oferecer suporte a Assinantes do SQL Server Compact, você deve especificar trueo .

@web_synchronization_url [ = ] N'web_synchronization_url'

Especifica o valor padrão da URL da Internet usado para sincronização da Web. @web_synchronization_url é nvarchar(500), com um padrão de NULL. Define a URL padrão da Internet se uma não estiver explicitamente definida quando sp_addmergepullsubscription_agent for executada.

@allow_partition_realignment [ = ] N'allow_partition_realignment'

Determina se exclusões serão enviadas para o Assinante quando modificação da linha no Publicador causar a mudança de sua partição. @allow_partition_realignment é nvarchar(5), com um padrão de true.

  • true envia exclusões ao Assinante para refletir os resultados de uma alteração de partição removendo dados que não fazem mais parte da partição do Assinante.

  • false deixa os dados de uma partição antiga no Assinante, onde as alterações feitas nesses dados no Publicador não são replicadas para esse Assinante, mas as alterações feitas no Assinante são replicadas para o Publicador.

Definir @allow_partition_realignment como false é usado para reter dados em uma assinatura de uma partição antiga quando os dados precisam estar acessíveis para fins históricos.

Observação

Os dados que permanecem no Assinante como resultado da configuração de @allow_partition_realignment devem false ser tratados como se fossem somente leitura; no entanto, isso não é imposto pelo sistema de replicação.

@retention_period_unit [ = ] N'retention_period_unit'

Especifica as unidades para o período de retenção definido por @retention. @retention_period_unit é nvarchar(10) e pode ser um dos seguintes valores.

Valor Versão
day (padrão) O período de retenção é especificado em dias.
week O período de retenção é especificado em semanas.
month O período de retenção é especificado em meses.
year O período de retenção é especificado em anos.

@generation_leveling_threshold [ = ] generation_leveling_threshold

Especifica o número de alterações contidas em uma geração. Uma geração é uma coleção de alterações que é entregue a um Publicador ou Assinante. @generation_leveling_threshold é int, com um padrão de 1000.

@automatic_reinitialization_policy [ = ] automatic_reinitialization_policy

Especifica se as alterações são carregadas do Assinante antes de uma reinicialização automática exigida por uma alteração na publicação, em que um valor de 1 foi especificado para @force_reinit_subscription. @automatic_reinitialization_policy é bit, com um padrão de 0.

1 significa que as alterações são carregadas do Assinante antes que ocorra uma reinicialização automática.

Importante

Se você adicionar, descartar ou alterar um filtro com parâmetros, as alterações pendentes no Assinante não poderão ser carregadas no Publicador durante a reinicialização. Para carregar alterações pendentes, sincronize todas as assinaturas antes de alterar o filtro.

@conflict_logging [ = ] N'conflict_logging'

Especifica onde são armazenados registros de conflito. @conflict_logging é nvarchar(15) e pode ser um dos seguintes valores:

Valor Descrição
publisher Registros de conflito são armazenados no Publicador.
subscriber Registros de conflito são armazenados no Assinante que causou o conflito. Não há suporte para Assinantes do SQL Server Compact.
both Registros de conflito são armazenados no Publicador e no Assinante.
NULL (padrão) A replicação define automaticamente @conflict_logging para both quando o valor @publication_compatibility_level é 90RTM e para publisher em todos os outros casos.

Valores do código de retorno

0 (sucesso) ou 1 (falha).

Comentários

sp_addmergepublication é usado na replicação de mesclagem.

Para listar objetos de publicação no Active Directory usando o parâmetro @add_to_active_directory , o objeto SQL Server já deve ter sido criado no Active Directory.

Se houver várias publicações que publiquem o mesmo objeto de banco de dados, somente as publicações com um valor @replicate_ddl de 1 replicar ALTER TABLEinstruções , ALTER VIEW, ALTER PROCEDURE, ALTER FUNCTIONe ALTER TRIGGER DDL. No entanto, uma ALTER TABLE DROP COLUMN instrução DDL será replicada por todas as publicações que estão publicando a coluna descartada.

Para Assinantes do SQL Server Compact, o valor de @alternate_snapshot_folder só é usado quando o valor de @snapshot_in_default_folder é false.

Com a replicação DDL habilitada (@replicate_ddl = 1) para uma publicação, para fazer alterações DDL não replicantes na publicação, sp_changemergepublication deve primeiro ser executada para definir @replicate_ddl como 0. Depois que as instruções DDL não replicantes forem emitidas, sp_changemergepublication poderá ser executado novamente para ativar a replicação DDL novamente.

Exemplos

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

Permissões

Somente membros da função de servidor fixa sysadmin ou db_owner função de banco de dados fixa podem executar sp_addmergepublication.