sp_addpublication (Transact-SQL)

适用于SQL Server Azure SQL 托管实例

创建快照或事务发布。 此存储过程在发布服务器上对发布数据库执行。

Transact-SQL 语法约定

语法

sp_addpublication
    [ @publication = ] N'publication'
    [ , [ @taskid = ] taskid ]
    [ , [ @restricted = ] N'restricted' ]
    [ , [ @sync_method = ] N'sync_method' ]
    [ , [ @repl_freq = ] N'repl_freq' ]
    [ , [ @description = ] N'description' ]
    [ , [ @status = ] N'status' ]
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @immediate_sync = ] N'immediate_sync' ]
    [ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
    [ , [ @allow_push = ] N'allow_push' ]
    [ , [ @allow_pull = ] N'allow_pull' ]
    [ , [ @allow_anonymous = ] N'allow_anonymous' ]
    [ , [ @allow_sync_tran = ] N'allow_sync_tran' ]
    [ , [ @autogen_sync_procs = ] N'autogen_sync_procs' ]
    [ , [ @retention = ] retention ]
    [ , [ @allow_queued_tran = ] N'allow_queued_tran' ]
    [ , [ @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' ]
    [ , [ @allow_dts = ] N'allow_dts' ]
    [ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
    [ , [ @conflict_policy = ] N'conflict_policy' ]
    [ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
    [ , [ @conflict_retention = ] conflict_retention ]
    [ , [ @queue_type = ] N'queue_type' ]
    [ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
    [ , [ @logreader_job_name = ] N'logreader_job_name' ]
    [ , [ @qreader_job_name = ] N'qreader_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @allow_initialize_from_backup = ] N'allow_initialize_from_backup' ]
    [ , [ @replicate_ddl = ] replicate_ddl ]
    [ , [ @enabled_for_p2p = ] N'enabled_for_p2p' ]
    [ , [ @publish_local_changes_only = ] N'publish_local_changes_only' ]
    [ , [ @enabled_for_het_sub = ] N'enabled_for_het_sub' ]
    [ , [ @p2p_conflictdetection = ] N'p2p_conflictdetection' ]
    [ , [ @p2p_originator_id = ] p2p_originator_id ]
    [ , [ @p2p_continue_onconflict = ] N'p2p_continue_onconflict' ]
    [ , [ @allow_partition_switch = ] N'allow_partition_switch' ]
    [ , [ @replicate_partition_switch = ] N'replicate_partition_switch' ]
    [ , [ @allow_drop = ] N'allow_drop' ]
    [ , [ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy' ]
[ ; ]

参数

[ @publication = ] N'publication'

要创建的发布的名称。 @publicationsysname,无默认值。 该名称在数据库中必须唯一。

[ @taskid = ] taskid

仅支持向后兼容性;使用 sp_addpublication_snapshot (Transact-SQL)。

[ @restricted = ] N'restricted'

仅支持向后兼容性;use default_access.

[ @sync_method = ] N'sync_method'

同步模式。 @sync_methodnvarchar(40),可以是以下值之一。

说明
native 1 生成所有表的本机模式大容量复制程序输出。
character 生成所有表的字符模式大容量复制程序输出。 注意: 对于 Oracle 发布服务器, character 仅适用于快照复制。
concurrent 1 生成所有表的本机模式大容量复制程序输出,但不在快照期间锁定表。 只有事务发布支持该值。
concurrent_c 生成所有表的字符模式大容量复制程序输出,但在快照期间不会锁定表。 只有事务发布支持该值。
database snapshot 从数据库快照生成所有表的本机模式大容量复制程序输出。 数据库快照在 SQL Server 的每个版本中都不可用。 有关 SQL Server 各个版本支持的功能列表,请参阅“SQL Server 2022 的各个版本及其支持的功能”。
database snapshot character 从数据库快照生成所有表的字符模式大容量复制程序输出。 数据库快照在 SQL Server 的每个版本中都不可用。 有关 SQL Server 各个版本支持的功能列表,请参阅“SQL Server 2022 的各个版本及其支持的功能”。
NULL(默认值) native默认为 SQL Server 发布服务器。 对于非 SQL Server 发布服务器,默认为character@repl_freq Snapshot以及针对所有其他情况concurrent_c。

1 Oracle 发布服务器不支持。

[ @repl_freq = ] N'repl_freq'

复制频率的类型, @repl_freqnvarchar(10),可以是下列值之一。

说明
continuous(默认值) 日志读取器代理持续运行。 对于非 SQL Server 发布服务器,这要求 @sync_method 设置为 concurrent_c
snapshot 日志读取器代理按计划运行。 对于非 SQL Server 发布服务器,这要求 @sync_method 设置为 character

[ @description = ] N'description'

发布的可选说明。 @descriptionnvarchar(255),默认值为 NULL.

[ @status = ] N'status'

指定发布数据是否可用。 @status为 nvarchar(8),可以是以下值之一。

说明
active 发布数据可立即用于订阅服务器。
inactive(默认值) 首次创建发布时,发布数据不适用于订阅服务器(他们可以订阅,但未处理订阅)。

Oracle 发布服务器不支持。

[ @independent_agent = ] N'independent_agent'

指定此出版物是否有独立分发代理。 @independent_agent为 nvarchar(5),默认值为 false.

  • 如果true,此出版物有独立的分发代理。
  • 如果false发布使用共享分发代理,并且每个发布服务器数据库/订阅服务器数据库对都有一个共享代理。

[ @immediate_sync = ] N'immediate_sync'

指定每次运行快照代理时是否为发布创建同步文件。 @immediate_syncnvarchar(5),默认值为 false.

如果true,则每次运行快照代理时都会创建或重新创建同步文件。 如果快照代理在订阅创建前完成,则订阅服务器可以立即获得同步文件。 新订阅将获取最近一次执行快照代理所生成的最新同步文件。 @independent_agent必须是true@immediate_synctrue 如果 false为同步文件,则仅当存在新订阅时才会创建同步文件。 在向现有发布添加新项目时,必须为每个订阅调用 sp_addsubscription 。 在启动和完成快照代理之前,订阅服务器在订阅后无法接收同步文件。

[ @enabled_for_internet = ] N'enabled_for_internet'

指定是否为 Internet 启用此发布,并确定是否可以使用文件传输协议 (FTP) 将快照文件传输到订阅服务器。 @enabled_for_internet为 nvarchar(5),默认值为 false. 如果 true为发布,则发布同步文件将 C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp 放入目录中。 用户必须创建 Ftp 目录。

[ @allow_push = ] N'allow_push'

指定是否可为给定发布创建推入订阅。 @allow_pushnvarchar(5),默认值 true为允许发布上的推送订阅。

[ @allow_pull = ] N'allow_pull'

指定是否可为给定发布创建拉出订阅。 @allow_pull为 nvarchar(5),默认值为 false. 如果 false不允许在发布上请求订阅。

[ @allow_anonymous = ] N'allow_anonymous'

指定是否可为给定发布创建匿名订阅。 @allow_anonymous为 nvarchar(5),默认值为 false. 如果 true@immediate_sync 也必须设置为 true。 如果 false不允许匿名订阅发布。

[ @allow_sync_tran = ] N'allow_sync_tran'

指定是否允许对发布使用立即更新订阅。 @allow_sync_tran为 nvarchar(5),默认值为 false. trueOracle 发布服务器不支持。

[ @autogen_sync_procs = ] N'autogen_sync_procs'

指定是否在发布服务器中为更新订阅生成同步存储过程。 @autogen_sync_procs为 nvarchar(5),可以是以下值之一。

说明
true 在启用更新订阅时自动设置。
false 在未启用或未为 Oracle 发布服务器更新订阅时自动设置。
NULL(默认值) 默认为 true 启用更新订阅时和 false 未启用更新订阅时。

注意

根据为@allow_queued_tran和@allow_sync_tran指定的值,将覆盖@autogen_sync_procs的用户提供的值

[ @retention = ] 保留期

订阅活动的保留期(以小时为单位)。 @retention为 int,默认值为 336. 如果订阅在保留期内未处于活动状态,则会过期并被删除。 该值可以大于发布服务器使用的分发数据库的最大保持期。 如果 0,对发布的已知订阅永远不会过期,并且会被过期的订阅清理代理删除。

[ @allow_queued_tran = ] N'allow_queued_tran'

在订阅服务器中启用或禁用更改的队列,直到可在发布服务器上应用这些更改为止。 @allow_queued_tran为 nvarchar(5),默认值为 false.

  • 如果 false订阅服务器上发生更改,则不会排队。
  • trueOracle 发布服务器不支持。

[ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder'

指定是否将快照文件存储在默认文件夹中。 @snapshot_in_defaultfolder为 nvarchar(5),默认值为 true.

  • 如果 true,可以在默认文件夹中找到快照文件。
  • 如果false快照文件存储在由@alt_snapshot_folder指定的备用位置。

备用位置可以在另一台服务器、一个网络驱动器或可移动介质(如光盘或可移动磁盘)上。 也可以将快照文件保存到 FTP 站点以供订阅服务器以后检索。 此参数可以是 true,并且仍具有@alt_snapshot_folder参数中的位置。 该组合指定将快照文件同时存储在默认位置和备用位置。

[ @alt_snapshot_folder = ] N'alt_snapshot_folder'

指定快照的备用文件夹的位置。 @alt_snapshot_folder为 nvarchar(255),默认值为 NULL.

[ @pre_snapshot_script = ] N'pre_snapshot_script'

指定指向.sql文件位置的指针。 @pre_snapshot_scriptnvarchar(255),默认值为 NULL. 在订阅服务器上应用快照时,分发代理将在运行任何复制的对象脚本之前运行预快照脚本。 该脚本在分发代理连接到订阅数据库时使用的安全上下文中执行。

[ @post_snapshot_script = ] N'post_snapshot_script'

指定指向文件位置的 .sql 指针。 @post_snapshot_script为 nvarchar(255),默认值为 NULL. 分发代理将在初始同步过程中已应用所有其他复制的对象脚本和数据之后才运行快照后脚本。 该脚本在分发代理连接到订阅数据库时使用的安全上下文中执行。

[ @compress_snapshot = ] N'compress_snapshot'

指定写入 @alt_snapshot_folder 位置的快照将被压缩为 Microsoft CAB 格式。 @compress_snapshot为 nvarchar(5),默认值为 false.

  • false 指定快照未压缩。
  • true 指定压缩快照。

无法压缩大于 2 GB 的快照文件。 压缩快照文件在分发代理运行的位置解压缩;请求订阅通常与压缩快照一起使用,以便在订阅服务器上解压缩文件。 无法压缩默认文件夹中的快照。

[ @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),默认值为 NULL. 由于此属性为每个发布存储,因此每个发布可以有自己的 @ftp_subdirctory 或选择没有子目录(用值 NULL 指示)。

[ @ftp_login = ] N'ftp_login'

用于连接到 FTP 服务的用户名。 @ftp_login为 sysname,默认值为 anonymous.

[ @ftp_password = ] N'ftp_password'

用于连接到 FTP 服务的用户密码。 @ftp_password为 sysname,默认值为 NULL.

[ @allow_dts = ] N'allow_dts'

指定发布允许数据转换。 创建订阅时可以指定 DTS 包。 @allow_dts为 nvarchar(5),默认值false不允许 DTS 转换。 如果@allow_dts为 true,则必须将@sync_method设置为或 character concurrent_c

trueOracle 发布服务器不支持。

[ @allow_subscription_copy = ] N'allow_subscription_copy'

启用或禁用对订阅此发布的订阅数据库的复制功能。 @allow_subscription_copynvarchar(5),默认值为 false.

[ @conflict_policy = ] N'conflict_policy'

指定使用排队更新订阅服务器选项时遵循的冲突解决策略。 @conflict_policy为 nvarchar(100),可以是以下值之一。

说明
pub wins 发布服务器在冲突中入选。
sub reinit 重新初始化订阅。
sub wins 订阅服务器在冲突中入选。
NULL(默认值) 如果 NULL发布是快照发布,则默认策略变为 sub reinit。 如果 NULL 发布不是快照发布,则默认值将 pub wins变为 。

Oracle 发布服务器不支持。

[ @centralized_conflicts = ] N'centralized_conflicts'

指定是否在发布服务器上存储冲突记录。 @centralized_conflictsnvarchar(5),默认值为 NULL.

  • 如果 true存在冲突记录,则存储在发布服务器上。
  • 如果 false冲突记录存储在发布服务器和导致冲突的订阅服务器上。

Oracle 发布服务器不支持。

[ @conflict_retention = ] conflict_retention

指定冲突保持期(天)。 这是为对等事务复制和排队更新订阅保存冲突元数据的一段时间。 @conflict_retention为 int,默认值为 14.

Oracle 发布服务器不支持。

[ @queue_type = ] N'queue_type'

指定所使用的队列类型。 @queue_typenvarchar(10),可以是这些值之一。

说明
sql 使用 SQL Server 存储事务。
NULL(默认值) 默认值 sql,指定使用 SQL Server 存储事务。

注意

停止使用Microsoft消息队列。 指定值 msmq 将导致警告,复制将自动将值设置为 sql

Oracle 发布服务器不支持。

[ @add_to_active_directory = ] N'add_to_active_directory'

此参数已弃用,仅支持脚本的向后兼容性。 不能再将发布信息添加到 Microsoft Active Directory。

[ @logreader_job_name = ] N'logreader_job_name'

现有代理作业的名称。 @logreader_job_name为 sysname,默认值为 NULL. 仅当日志读取器代理使用现有作业而不是正在创建新作业时,才指定此参数。

[ @qreader_job_name = ] N'qreader_job_name'

现有代理作业的名称。 @qreader_job_name为 sysname,默认值为 NULL. 仅当队列读取器代理使用现有作业而不是正在创建新作业时,才指定此参数。

[ @publisher = ] N'publisher'

指定非 SQL Server 发布服务器。 @publisher为 sysname,默认值为 NULL.

将发布添加到 SQL Server 发布服务器时,不应使用@publisher

[ @allow_initialize_from_backup = ] N'allow_initialize_from_backup'

指示订阅服务器是否能够从备份而不是从初始快照来初始化对此发布的订阅。 @allow_initialize_from_backupnvarchar(5),可以是以下值之一:

说明
true 启用从备份进行的初始化。
false 禁用从备份进行的初始化。
NULL(默认值) true对于对等复制拓扑和false所有其他发布,默认为发布。

有关详细信息,请参阅 初始化事务订阅(不使用快照)中手动初始化订阅。

警告

若要避免缺少订阅者数据,在使用时sp_addpublication@allow_initialize_from_backup = N'true',请始终使用@immediate_sync = N'true'

[ @replicate_ddl = ] replicate_ddl

指示发布是否支持架构复制。 @replicate_ddl为 int,默认1为 SQL Server 发布服务器和非 0 SQL Server 发布服务器。

  • 1 指示复制在发布服务器上执行的数据定义语言 (DDL) 语句。
  • 0 指示不会复制 DDL 语句。

Oracle 发布服务器不支持架构复制。

有关详细信息,请参阅对发布数据库进行架构更改

DDL 语句添加列时,将遵循 @replicate_ddl 参数。 当 DDL 语句因以下原因更改或删除列时,将忽略@replicate_ddl 参数。

  • 删除列时, sysarticlecolumns 必须更新该列以防止新的 DML 语句包括已删除的列,这将导致分发代理失败。 忽略 @replicate_ddl 参数,因为复制必须始终复制架构更改。

  • 更改列时,源数据类型或可为 null 性可能已更改,导致 DML 语句包含可能与订阅服务器上的表不兼容的值。 这种 DML 语句可能导致分发代理失败。 忽略 @replicate_ddl 参数,因为复制必须始终复制架构更改。

  • 当 DDL 语句添加新列时, sysarticlecolumns 不包括新列。 DML 语句不会尝试复制新列的数据。 采用该参数,因为复制或不复制 DDL 均可接受。

[ @enabled_for_p2p = ] N'enabled_for_p2p'

允许将发布用于对等复制拓扑中。 @enabled_for_p2p为 nvarchar(5),默认值为 false. true 指示发布支持对等复制。 将@enabled_for_p2p设置为true时,将应用以下限制:

  • @allow_anonymous 必须是 false
  • @allow_dts必须是 false
  • @allow_initialize_from_backup 必须是 true
  • @allow_queued_tran 必须是 false
  • @allow_sync_tran 必须是 false
  • @conflict_policy必须是 false
  • @independent_agent必须是 true
  • @repl_freq必须是 continuous
  • @replicate_ddl必须是 1

有关详细信息,请参阅 对等 - 事务复制

[ @publish_local_changes_only = ] N'publish_local_changes_only'

标识为仅供参考。 不支持。 不保证以后的兼容性。

[ @enabled_for_het_sub = ] N'enabled_for_het_sub'

使发布支持非 SQL Server 订阅服务器。 @enabled_for_het_subnvarchar(5),默认值为 false. 表示发布支持非 SQL Server 订阅服务器的值 true 。 当 @enabled_for_het_subtrue,将应用以下限制:

  • @allow_initialize_from_backup 必须是 false
  • @allow_push必须是 true
  • @allow_queued_tran 必须是 false
  • @allow_subscription_copy必须是 false
  • @allow_sync_tran 必须是 false
  • @autogen_sync_procs 必须是 false
  • @conflict_policy必须是 NULL
  • @enabled_for_internet 必须是 false
  • @enabled_for_p2p必须是 false
  • @ftp_address 必须是 NULL
  • @ftp_subdirectory必须是 NULL
  • @ftp_password 必须是 NULL
  • @pre_snapshot_script 必须是 NULL
  • @post_snapshot_script 必须是 NULL
  • @replicate_ddl 必须为 0。
  • @qreader_job_name必须是 NULL
  • @queue_type 必须是 NULL
  • @sync_method 不能 nativeconcurrent

有关详细信息,请参阅 Non-SQL Server Subscribers

[ @p2p_conflictdetection = ] N'p2p_conflictdetection'

如果为对等复制启用发布,则启用分发代理以检测冲突。 @p2p_conflictdetectionnvarchar(5),默认值为 false. 有关详细信息,请参阅 对等复制中的对等 - 冲突检测。

[ @p2p_originator_id = ] p2p_originator_id

指定对等拓扑中某个节点的 ID。 @p2p_originator_id为 int,默认值为 NULL. 如果 @p2p_conflictdetection 设置为 TRUE,则此 ID 用于冲突检测。 指定拓扑中未使用的正非零 ID。 有关使用的 ID 列表,请执行 sp_help_peerconflictdetection

[ @p2p_continue_onconflict = ] N'p2p_continue_onconflict'

确定检测到冲突后分发代理是否继续处理更改。 @p2p_continue_onconflict为 nvarchar(5),默认值为 false.

注意

建议使用默认值 。false 如果此选项设置为true,则分发代理尝试通过应用来自最原始发起方 ID 的节点中的冲突行来聚合拓扑中的数据。 此方法不能保证收敛。 您应确保检测到冲突之后拓扑保持一致。 有关详细信息,请参阅对等复制中的 “处理冲突” - 对等复制中的冲突检测。

[ @allow_partition_switch = ] N'allow_partition_switch'

指定是否可以 ALTER TABLE...SWITCH 对已发布的数据库执行语句。 @allow_partition_switch为 nvarchar(5),默认值为 false. 有关详细信息,请参阅复制已分区表和索引

[ @replicate_partition_switch = ] N'replicate_partition_switch'

指定是否 ALTER TABLE...SWITCH 应将针对已发布数据库执行的语句复制到订阅服务器。 @replicate_partition_switch为 nvarchar(5),默认值为 NULL. 仅当@allow_partition_switch设置为 TRUE 时,此选项才有效。

[ @allow_drop = ] N'allow_drop'

标识为仅供参考。 不支持。 不保证以后的兼容性。

[ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy'

适用于: SQL Server 2019 (15.x) CU 13 及更高版本。

@p2p_conflictdetection_policy为 nvarchar(12),可以是以下值之一:

说明
originatorid(默认值) 如果存在,分发代理会检测冲突,并根据发起方 ID p2p_continue_onconflict = N'true'决定获胜者。 否则,将引发错误。
lastwriter 分发代理检测到冲突,并根据最后一个编写器的日期时间(如果 p2p_continue_onconflict = N'true') 决定获胜者。 否则,将引发错误。

注意

指定 originatorid时,冲突检测与 SQL Server 2019 (15.x) CU 12 及更低版本相同。 指定 lastwriter时,SQL Server 允许根据最近的写入自动解决冲突。

返回代码值

0(成功)或 1(失败)。

注解

sp_addpublication 用于快照复制和事务复制。

如果存在多个发布发布相同的数据库对象,则只有具有复制、、、和 ALTER TRIGGER ALTER FUNCTIONDDL 语句@replicate_ddl值的1发布。 ALTER PROCEDUREALTER VIEWALTER TABLE 但是, ALTER TABLE DROP COLUMN DDL 语句由发布已删除列的所有发布复制。

为发布启用 DDL 复制(@replicate_ddl = 1),若要对发布进行非重复的 DDL 更改,必须先执行sp_changepublication才能将@replicate_ddl设置为 。0 发出非重复 DDL 语句后, 可以再次运行sp_changepublication 以重新打开 DDL 复制。

示例

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. 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 @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot replication on the publication 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;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

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

权限

只有 sysadmin 固定服务器角色的成员db_owner固定数据库角色的成员才能执行sp_addpublication Windows 身份验证登录名必须在数据库中具有代表其 Windows 用户帐户的用户帐户。 表示 Windows 组的用户帐户是不够的。