sp_addmergepublication (Transact-SQL)

適用対象: SQL ServerAzure 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'

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

[ @description = ] N'description'

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

[ @retention = ] 保持

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

Note

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

[ @sync_mode = ] N'sync_mode'

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

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

[ @allow_push = ] N'allow_push'

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

[ @allow_pull = ] N'allow_pull'

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

[ @allow_anonymous = ] N'allow_anonymous'

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

[ @enabled_for_internet = ] N'enabled_for_internet'

パブリケーションがインターネットに対して有効になっているかどうかを指定し、ファイル転送プロトコル (FTP) を使用してスナップショット ファイルをサブスクライバーに転送できるかどうかを決定します。 @enabled_for_internetは nvarchar(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_filtersは nvarchar(5) で、既定値は false.

Note

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

[ @snapshot_in_defaultfolder = ] N'スナップショット_in_defaultfolder'

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

[ @alt_snapshot_folder = ] N'alt_スナップショット_folder'

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

[ @pre_snapshot_script = ] N'pre_スナップショット_script'

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

[ @post_snapshot_script = ] N'post_スナップショット_script'

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

[ @compress_snapshot = ] N'compress_スナップショット'

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

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

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

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

[ @ftp_address = ] N'ftp_address'

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

[ @ftp_port = ] ftp_port

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

[ @ftp_subdirectory = ] N'ftp_subdirectory'

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

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

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

Note

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

[ @ftp_login = ] N'ftp_login'

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

[ @ftp_password = ] N'ftp_password'

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

重要

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

[ @conflict_retention = ] conflict_retention

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

[ @keep_partition_changes = ] N'keep_partition_changes'

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

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

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

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

Note

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

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

[ @allow_subscription_copy = ] N'allow_subscription_copy'

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

[ @allow_synctoalternate = ] N'allow_synctoalternate'

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

[ @validate_subscriber_info = ] N'validate_subscriber_info'

パラメーター化された行フィルターを使用する場合、パブリッシュされたデータのサブスクライバー パーティションを定義するのに使用する関数を一覧表示します。 @validate_subscriber_infoは nvarchar(500) で、既定値は NULL. この情報は、マージ エージェントがサブスクライバーのパーティションを検証するときに使用されます。 たとえば、パラメーター化された行フィルターで SU Standard EditionR_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_mergeは int で、既定値は 0. for の 0 値は、特定の時点で実行される同時マージ プロセスの数に制限がないことを意味します。

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

[ @max_concurrent_dynamic_snapshots = ] max_concurrent_dynamic_スナップショット

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

[ @use_partition_groups = ] N'use_partition_groups'

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

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

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

[ @publication_compatibility_level = ] N'publication_compatibility_level'

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

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

[ @replicate_ddl = ] replicate_ddl

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

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

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

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

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

[ @allow_subscriber_initiated_snapshot = ] N'allow_subscriber_initiated_スナップショット'

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

[ @allow_web_synchronization = ] N'allow_web_synchronization'

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

[ @web_synchronization_url = ] N'web_synchronization_url'

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

[ @allow_partition_realignment = ] N'allow_partition_realignment'

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

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

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

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

Note

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

[ @retention_period_unit = ] N'retention_period_unit'

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

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

[ @generation_leveling_threshold = ] generation_leveling_threshold

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

[ @automatic_reinitialization_policy = ] automatic_reinitialization_policy

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

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

重要

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

[ @conflict_logging = ] N'conflict_logging'

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

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

リターン コードの値

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

解説

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

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

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

SQL Server Compact サブスクライバーの場合、@alternate_スナップショット_folderの値は 、@スナップショット_in_default_folder値が false.

パブリケーションに対して DDL レプリケーションを有効 (@replicate_ddl = 1) にした場合、パブリケーションに対して非レプリケート DDL 変更を行うには、最初に sp_changemergepublication (Transact-SQL) を実行して、@replicate_ddlを > に設定する0必要があります。 レプリケートされていない 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できます。