次の方法で共有


sp_addmergepublication (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

新しいマージ パブリケーションを作成します。 このストアド プロシージャは、公開されているデータベースのパブリッシャーで実行されます。

Transact-SQL 構文表記規則

構文

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' ]
[ ; ]

引数

[ @publication = ] N'publication'

作成するマージ パブリケーションの名前。 @publicationsysname で、既定値はなく、キーワード ALLにすることはできません。 パブリケーションの名前は、データベース内で一意である必要があります。

[ @description = ] N'description'

パブリケーションの説明。 @descriptionnvarchar(255) で、既定値は NULL です。

[ @retention = ] retention

特定の @publicationの変更を保存する保持期間単位の保持期間。 @retentionint で、既定値は 14 です。 保有期間の単位は、 @retention_period_unitによって定義されます。 保持期間内にサブスクリプションが同期されず、受信した保留中の変更がディストリビューターのクリーンアップ操作によって削除された場合、サブスクリプションは期限切れになり、再初期化する必要があります。 許容される最大保有期間は、9999 年 12 月 31 日から現在の日付までの日数です。

Note

マージ パブリケーションの保有期間には、異なるタイム ゾーンのサブスクライバーに対応するため、24 時間の猶予期間があります。 たとえば、保有期間を 1 日に設定した場合、実際の保有期間は 48 時間となります。

[ @sync_mode = ] N'sync_mode'

パブリケーションへのサブスクライバーの初期同期のモード。 @sync_modenvarchar(10)であり、次のいずれかの値を指定できます。

Value 説明
native (既定値) すべてのテーブルのネイティブ モードの一括コピー プログラム出力を生成します。
character すべてのテーブルの文字モードの一括コピー プログラム出力を生成します。 SQL Server Compact および SQL Server 以外のサブスクライバーをサポートするために必要です。

[ @allow_push = ] N'allow_push'

指定されたパブリケーションに対してプッシュ サブスクリプションを作成できるかどうかを指定します。 @allow_pushnvarchar(5)で、既定値は true で、パブリケーションでプッシュ サブスクリプションを使用できます。

[ @allow_pull = ] N'allow_pull'

指定されたパブリケーションに対してプル サブスクリプションを作成できるかどうかを指定します。 @allow_pullnvarchar(5)で、既定値は true で、パブリケーションでプル サブスクリプションを使用できます。 SQL Server Compact サブスクライバーをサポートするには、true を指定する必要があります。

[ @allow_anonymous = ] N'allow_anonymous'

特定のパブリケーションに対して、匿名サブスクリプションを作成できるかどうかを指定します。 @allow_anonymousnvarchar(5) で、既定値は true で、パブリケーションで匿名サブスクリプションを許可します。 SQL Server Compact サブスクライバーをサポートするには、 trueを指定する必要があります。

[ @enabled_for_internet = ] N'enabled_for_internet'

パブリケーションがインターネットに対して有効になっているかどうかを指定し、ファイル転送プロトコル (FTP) を使用してスナップショット ファイルをサブスクライバーに転送できるかどうかを決定します。 @enabled_for_internetnvarchar(5) で、既定値は false です。 true場合、パブリケーションの同期ファイルは C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp ディレクトリに格納されます。 ユーザーは Ftp ディレクトリを作成する必要があります。 false場合、パブリケーションはインターネット アクセスに対して有効になっていません。

[ @centralized_conflicts = ] N'centralized_conflicts'

このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 @conflict_loggingを使用して、競合レコードを格納する場所を指定します。

[ @dynamic_filters = ] N'dynamic_filters'

マージ パブリケーションでパラメーター化された行フィルターを使用できるようにします。 @dynamic_filtersnvarchar(5) で、既定値は false です。

Note

このパラメーターは指定しないでください。代わりに、パラメーター化された行フィルターが使用されているかどうかを SQL Server が自動的に判断できるようにします。 @dynamic_filterstrue の値を指定する場合は、アーティクルのパラメーター化された行フィルターを定義する必要があります。 詳しくは、「 マージ アーティクルのパラメーター化された行フィルターの定義および変更」をご覧ください。

[ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder'

スナップショット ファイルを既定のフォルダーに格納するかどうかを指定します。 @snapshot_in_defaultfoldernvarchar(5) で、既定値は true です。 true場合、スナップショット ファイルは既定のフォルダーにあります。 false場合、スナップショット ファイルは、@alternate_snapshot_folderで指定された別の場所に格納されます。 別の場所は、別のサーバー、ネットワーク ドライブ、リムーバブル メディア (リムーバブル ディスクなど) 上に配置できます。 後でサブスクライバーが取得できるように、スナップショット ファイルをファイル転送プロトコル (FTP) サイトに保存することもできます。 このパラメーターは true にすることができ、引き続き @alt_snapshot_folder で指定された場所を持つことができます。 この組み合わせは、スナップショット ファイルが既定の場所と代替の場所の両方に格納されることを指定します。

[ @alt_snapshot_folder = ] N'alt_snapshot_folder'

スナップショットの代替フォルダーの場所を指定します。 @alt_snapshot_foldernvarchar(255) で、既定値は NULL です。

[ @pre_snapshot_script = ] N'pre_snapshot_script'

.sql ファイルの場所へのポインターを指定します。 @pre_snapshot_scriptnvarchar(255) で、既定値は NULL です。 マージ エージェントは、サブスクライバーでスナップショットを適用するときに、レプリケートされたオブジェクト スクリプトの前にプリスナップショット スクリプトを実行します。 このスクリプトは、サブスクリプション データベースに接続するときにマージ エージェントによって使用されるセキュリティ コンテキストで実行されます。 スナップショット前スクリプトは、SQL Server Compact サブスクライバーでは実行されません。

[ @post_snapshot_script = ] N'post_snapshot_script'

.sql ファイルの場所へのポインターを指定します。 @post_snapshot_scriptnvarchar(255) で、既定値は NULL です。 最初の同期のときに、マージ エージェントは、他のすべてのレプリケートされたオブジェクト スクリプトとデータが適用された後に、ポストスナップショット スクリプトを実行します。 このスクリプトは、サブスクリプション データベースに接続するときにマージ エージェントによって使用されるセキュリティ コンテキストで実行されます。 スナップショット後スクリプトは、SQL Server Compact サブスクライバーでは実行されません。

[ @compress_snapshot = ] N'compress_snapshot'

@alt_snapshot_folderの場所に書き込まれたスナップショットを Microsoft CAB 形式に圧縮することを指定します。 @compress_snapshotnvarchar(5) で、既定値は false です。

  • false は、スナップショットを圧縮しないことを指定します。

  • true は、スナップショットが圧縮されることを指定します。

2 GB を超えるスナップショット ファイルは圧縮できません。 圧縮されたスナップショット ファイルは、マージ エージェントが実行されている場所で解凍されます。一般にプル サブスクリプションでは、サブスクライバーでファイルが解凍されるように、圧縮されたスナップショットが使用されます。 既定のフォルダー内のスナップショットは圧縮できません。 SQL Server Compact サブスクライバーをサポートするには、 falseを指定する必要があります。

[ @ftp_address = ] N'ftp_address'

ディストリビューターの FTP サービスのネットワーク アドレス。 @ftp_addresssysname で、既定値は NULL です。 サブスクライバーのマージ エージェントが取得するパブリケーション スナップショット ファイルの場所を指定します。 このプロパティはパブリケーションごとに格納されるため、各パブリケーションは異なる @ftp_addressを持つことができます。 パブリケーションでは、FTP を使用したスナップショットの伝達がサポートされている必要があります。

[ @ftp_port = ] ftp_port

ディストリビューターの FTP サービスのポート番号。 @ftp_portint で、既定値は 21 です。 サブスクライバーのマージ エージェントが検索するパブリケーション スナップショット ファイルの場所を指定します。 このプロパティはパブリケーションごとに格納されるため、各パブリケーションに独自の @ftp_portを設定できます。

[ @ftp_subdirectory = ] N'ftp_subdirectory'

パブリケーションが FTP を使用したスナップショットの伝達をサポートしている場合に、サブスクライバーのマージ エージェントがスナップショット ファイルを取得できる場所を指定します。 @ftp_subdirectorynvarchar(255) で、既定値は ftp です。 このプロパティはパブリケーションごとに格納されるため、各パブリケーションは独自の @ftp_subdirctory を持つことができます。また、 NULL 値で示されるサブディレクトリを持たないことを選択することもできます。

パラメーター化されたフィルターを使用してパブリケーションのスナップショットを事前に生成する場合は、各サブスクライバー パーティションのデータ スナップショットが独自のフォルダーにある必要があります。 FTP を使用して事前に生成されたスナップショットのディレクトリ構造は、次の構造に従う必要があります。

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

Note

前の例の値 (山かっこ) は、パブリケーションとサブスクライバー パーティションの詳細によって異なります。

[ @ftp_login = ] N'ftp_login'

FTP サービスへの接続に使用するユーザー名。 @ftp_loginsysname で、既定値は anonymous です。

[ @ftp_password = ] N'ftp_password'

FTP サービスへの接続に使用するユーザー パスワード。 @ftp_passwordsysname で、既定値は NULL です。

重要

空白のパスワードを使用しないでください。 のパスワードを使用します

[ @conflict_retention = ] conflict_retention

競合が保持される保持期間を日数で指定します。 @conflict_retentionint で、競合テーブルから競合行が消去されるまでの既定値は 14 日です。

[ @keep_partition_changes = ] N'keep_partition_changes'

事前計算済みパーティションを使用できない場合に、パーティション変更の最適化を有効にするかどうかを指定します。 @keep_partition_changesnvarchar(5) で、既定値は true です。

  • false は、パーティションの変更が最適化されていないことを意味し、事前計算済みパーティションが使用されていない場合、パーティション内のデータが変更されると、すべてのサブスクライバーに送信されるパーティションが検証されます。

  • true は、パーティションの変更が最適化され、変更されたパーティションに行があるサブスクライバーのみが影響を受けます。

事前計算済みパーティションを使用する場合は、 @use_partition_groupstrue に設定し、 @keep_partition_changesfalse に設定します。 詳細については、「 パラメーター化されたフィルター - 事前計算済みパーティションの最適化を参照してください。

Note

@keep_partition_changestrue の値を指定する場合は、スナップショット エージェント パラメーター -MaxNetworkOptimization1 の値を指定します。 このパラメーターの詳細については、「Replication スナップショット エージェント」を参照してください。 エージェント パラメーターを指定する方法については、「 Replication エージェントの管理を参照してください。

SQL Server Compact サブスクライバーでは、削除が正しく反映されるように、 @keep_partition_changestrue に設定する必要があります。 falseに設定すると、サブスクライバーの行数が予想よりも多い場合があります。

[ @allow_subscription_copy = ] N'allow_subscription_copy'

このパブリケーションをサブスクライブするサブスクリプション データベースをコピーする機能を有効または無効にします。 @allow_subscription_copynvarchar(5) で、既定値は false です。 コピーするサブスクリプション データベースのサイズは 2 GB 未満にする必要があります。

[ @allow_synctoalternate = ] N'allow_synctoalternate'

単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

[ @validate_subscriber_info = ] N'validate_subscriber_info'

パラメーター化された行フィルターを使用する場合、パブリッシュされたデータのサブスクライバー パーティションを定義するのに使用する関数を一覧表示します。 @validate_subscriber_infonvarchar(500) で、既定値は NULL です。 この情報は、マージ エージェントがサブスクライバーのパーティションを検証するときに使用されます。 たとえば、パラメーター化された行フィルターで SUSER_SNAME を使用する場合は、パラメーターを @validate_subscriber_info=N'SUSER_SNAME()する必要があります。

Note

このパラメーターは指定しないでください。代わりに、SQL Server がフィルター条件を自動的に決定できるようにします。

[ @add_to_active_directory = ] N'add_to_active_directory'

このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 Microsoft Active Directory にパブリケーション情報を追加できなくなりました。

[ @max_concurrent_merge = ] max_concurrent_merge

同時マージ プロセスの最大数。 @max_concurrent_mergeint で、既定値は 0 です。 0の値は、特定の時点で実行される同時実行マージ プロセスの数に制限がないことを意味します。

このプロパティは、マージ パブリケーションに対して同時に実行できる同時マージ プロセスの数に制限を設定します。 実行できる値よりも多くのマージ プロセスが同時にスケジュールされている場合は、余分なジョブがキューに格納され、現在実行中のマージ プロセスが完了するまで待機します。

[ @max_concurrent_dynamic_snapshots = ] max_concurrent_dynamic_snapshots

サブスクライバー パーティションのフィルター処理されたデータ スナップショットを生成するために同時に実行できるスナップショット エージェント セッションの最大数。 @max_concurrent_dynamic_snapshotsint で、既定値は 0 です。 0場合、スナップショット セッションの数に制限はありません。 実行できる値よりも多くのスナップショット プロセスが同時にスケジュールされている場合は、余分なジョブがキューに格納され、現在実行中のスナップショット プロセスが完了するまで待機します。

[ @use_partition_groups = ] N'use_partition_groups'

事前計算済みパーティションを使用して同期プロセスを最適化することを指定します。 @use_partition_groupsnvarchar(5)であり、次のいずれかの値を指定できます。

Value 説明
true パブリケーションは事前計算済みパーティションを使用します。
false パブリケーションでは、事前計算済みパーティションは使用されません。
NULL (既定) システムがパーティション分割ストラテジを決定します。

既定では、事前計算済みパーティションが使用されます。 事前計算済みパーティションを使用しないようにするには、 @use_partition_groupsfalse に設定する必要があります。 NULLすると、事前計算済みパーティションを使用できるかどうかをシステムが決定します。 事前計算済みパーティションを使用できない場合、この値は実質的にエラーを生成せずに false になります。 このような場合は、 @keep_partition_changestrue に設定して、最適化を提供できます。 詳細については、「 パラメーター化されたフィルター - パラメーター化された行フィルターパラメーター化されたフィルター - 事前計算されたパーティションの最適化を参照してください。

[ @publication_compatibility_level = ] N'publication_compatibility_level'

パブリケーションの下位互換性を示します。 @publication_compatibility_levelnvarchar(6)であり、次のいずれかの値を指定できます。

Value バージョン
90RTM SQL Server 2005 (9.x)
100RTM SQL Server 2008 (10.0.x)

[ @replicate_ddl = ] replicate_ddl

パブリケーションでスキーマ レプリケーションがサポートされているかどうかを示します。 @replicate_ddlint で、既定値は NULL です。 1 はパブリッシャーで実行されるデータ定義言語 (DDL) ステートメントがレプリケートされることを示し、 0 は DDL ステートメントがレプリケートされていないことを示します。 詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。

@replicate_ddl パラメーターは、DDL ステートメントが列を追加するときに受け入れられます。 DDL ステートメントが次の理由で列を変更または削除すると、 @replicate_ddl パラメーターは無視されます。

  • 列が削除されると、ディストリビューション エージェントが失敗する原因となる削除された列が新しい DML ステートメントに含まれるのを防ぐために、 sysarticlecolumns を更新する必要があります。 レプリケーションでは常にスキーマ変更をレプリケートする必要があるため、 @replicate_ddl パラメーターは無視されます。

  • 列が変更されると、ソース データ型または null 値の許容が変更され、DML ステートメントにサブスクライバーのテーブルと互換性のない値が含まれる可能性があります。 そうした DML ステートメントは、ディストリビューション エージェントが失敗する原因となる場合があります。 レプリケーションでは常にスキーマ変更をレプリケートする必要があるため、 @replicate_ddl パラメーターは無視されます。

  • DDL ステートメントが新しい列を追加する場合、 sysarticlecolumns には新しい列は含まれません。 DML ステートメントは、新しい列のデータをレプリケートしようとしません。 DDL のレプリケートまたはレプリケートは許容されるため、このパラメーターは受け入れられます。

[ @allow_subscriber_initiated_snapshot = ] N'allow_subscriber_initiated_snapshot'

このパブリケーションのサブスクライバーが、データ パーティションのフィルター選択されたスナップショットを生成するスナップショット処理を開始できるかどうかを指定します。 @allow_subscriber_initiated_snapshotnvarchar(5) で、既定値は false です。 true は、サブスクライバーがスナップショット プロセスを開始できることを示します。

[ @allow_web_synchronization = ] N'allow_web_synchronization'

パブリケーションが Web 同期に対して有効かどうかを指定します。 @allow_web_synchronizationnvarchar(5) で、既定値は false です。 true は、このパブリケーションのサブスクリプションを HTTPS 経由で同期できることを指定します。 詳細については、「 Web Synchronization for Merge Replication」を参照してください。 SQL Server Compact サブスクライバーをサポートするには、 trueを指定する必要があります。

[ @web_synchronization_url = ] N'web_synchronization_url'

Web 同期に使用されるインターネット URL の既定値を指定します。 @web_synchronization_urlnvarchar(500) で、既定値は NULL です。 sp_addmergepullsubscription_agentの実行時に明示的に設定されていない場合は、既定のインターネット URL を定義します。

[ @allow_partition_realignment = ] N'allow_partition_realignment'

パブリッシャーで、行の変更によりパーティションに変更があった場合、削除をサブスクライバーに送信するかどうかを決定します。 @allow_partition_realignmentnvarchar(5) で、既定値は true です。

  • true は、サブスクライバーのパーティションの一部ではなくなったデータを削除することで、パーティション変更の結果を反映するためにサブスクライバーに削除を送信します。

  • false サブスクライバー上の古いパーティションからデータが残ります。パブリッシャー上のこのデータに加えられた変更はこのサブスクライバーにはレプリケートされませんが、サブスクライバーで行われた変更はパブリッシャーにレプリケートされます。

@allow_partition_realignmentfalse に設定すると、履歴の目的でデータにアクセスできる必要がある場合に、古いパーティションからサブスクリプション内のデータを保持できます。

Note

@allow_partition_realignmentfalse に設定した結果としてサブスクライバーに残っているデータは、読み取り専用であるかのように扱う必要があります。ただし、これはレプリケーション システムによって適用されません。

[ @retention_period_unit = ] N'retention_period_unit'

@retentionによって設定された保有期間の単位を指定します。 @retention_period_unitnvarchar(10)であり、次のいずれかの値を指定できます。

Value バージョン
day (既定) 保有期間は日数で指定します。
week リテンション期間は週単位で指定します。
month 保有期間は月単位で指定されます。
year 保有期間は年単位で指定されます。

[ @generation_leveling_threshold = ] generation_leveling_threshold

世代に含まれる変更の数を指定します。 世代とは、パブリッシャーまたはサブスクライバーに配信される変更のコレクションです。 @generation_leveling_thresholdint で、既定値は 1000 です。

[ @automatic_reinitialization_policy = ] automatic_reinitialization_policy

パブリケーションの変更で必要な自動再初期化の前に変更をサブスクライバーからアップロードするかどうかを指定します。ここで、@force_reinit_subscriptionの値1指定されています。 @automatic_reinitialization_policybit で、既定値は 0 です。

1 は、自動再初期化が行われる前に変更がサブスクライバーからアップロードされることを意味します。

重要

パラメーター化されたフィルターを追加、削除、または変更した場合、サブスクライバーで保留中の変更を再初期化中にパブリッシャーにアップロードすることはできません。 保留中の変更をアップロードしたい場合は、フィルターを変更する前にすべてのサブスクリプションを同期してください。

[ @conflict_logging = ] N'conflict_logging'

競合レコードを格納する場所を指定します。 @conflict_loggingnvarchar(15)であり、次のいずれかの値を指定できます。

Value 説明
publisher 競合レコードはパブリッシャーに格納されます。
subscriber 競合レコードは、競合の原因となったサブスクライバーに保存されます。 SQL Server Compact サブスクライバーではサポートされていません。
both 競合レコードは、パブリッシャーとサブスクライバーの両方に保存されます。
NULL (既定) レプリケーションでは、値@publication_compatibility_level90RTMされたときにboth@conflict_loggingが自動的に設定され、それ以外のすべての場合はpublisherされます。

リターン コードの値

0 (成功) または 1 (失敗)。

解説

sp_addmergepublication はマージ レプリケーションで使用されます。

@add_to_active_directory パラメーターを使用して Active Directory にパブリケーション オブジェクトを一覧表示するには、SQL Server オブジェクトが Active Directory に既に作成されている必要があります。

同じデータベース オブジェクトをパブリッシュするパブリケーションが複数存在する場合は、ALTER TABLEALTER VIEWALTER PROCEDUREALTER FUNCTION、およびALTER TRIGGER DDL ステートメントをレプリケート1@replicate_ddl値を持つパブリケーションのみがレプリケートされます。 ただし、削除された列をパブリッシュするすべてのパブリケーションによって、 ALTER TABLE DROP COLUMN DDL ステートメントがレプリケートされます。

SQL Server Compact サブスクライバーの場合、 @alternate_snapshot_folder の値は、 @snapshot_in_default_folder の値が falseされている場合にのみ使用されます。

パブリケーションに対して DDL レプリケーションを有効 (@replicate_ddl = 1) にした場合、パブリケーションに対して非レプリケート DDL 変更を行うには、 sp_changemergepublication を最初に実行して、 @replicate_ddl0 に設定する必要があります。 レプリケートされていない DDL ステートメントが発行された後、 sp_changemergepublication をもう一度実行して DDL レプリケーションを有効に戻すことができます。

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

アクセス許可

sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_addmergepublicationを実行できます。