sys.sp_addpublication(Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

建立快照式或交易式發行集。 這個預存程式會在發行集資料庫的發行者端執行。

Transact-SQL 語法慣例

語法

sys.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'

要建立的發行集名稱。 @publication為 sysname,沒有預設值。 這個名稱在資料庫內必須是唯一的。

[ @taskid = ] 任務ID

僅支援回溯相容性;使用 sp_addpublication_snapshot。

[ @restricted = ] N'restricted'

僅支援回溯相容性;使用 default_access。

[ @sync_method = ] N'sync_method'

同步處理模式。 @sync_method為 nvarchar(40),而且可以是下列其中一個值。

值 Description
native 1 產生所有數據表的原生模式大量複製程序輸出。
character 產生所有數據表的字元模式大量複製程序輸出。 注意: 對於 Oracle 發行者, character 僅適用於快照式複寫。
concurrent 1 產生所有數據表的原生模式大量複製程序輸出,但不會在快照集期間鎖定數據表。 僅支援交易式發行集。
concurrent_c 產生所有數據表的字元模式大量複製程序輸出,但不會在快照集期間鎖定數據表。 僅支援交易式發行集。
database snapshot 2 從資料庫快照集產生所有數據表的原生模式大量複製程序輸出。 每個 SQL Server 版本都無法使用資料庫快照集。
database snapshot character 2 從資料庫快照集產生所有數據表的字元模式大量複製程序輸出。 每個 SQL Server 版本都無法使用資料庫快照集。
NULL (預設值) native預設為 SQL Server 發行者。 若為非 SQL Server 發行者,則預設character為 當 @repl_freq 的值是 Snapshot ,並針對所有其他案例concurrent_c。

1 Oracle 發行者不支援。
2 關於 SQL Server 版本所支援的功能清單,請參見 SQL Server 2025 的版本與支援功能。

[ @repl_freq = ] N'repl_freq'

復寫頻率的類型, @repl_freq 是 nvarchar(10),而且可以是下列其中一個值。

值 Description
continuous (預設值) 記錄讀取器代理程式會持續執行。 針對非 SQL Server 發行者,這需要 將@sync_method 設定為 concurrent_c。
snapshot 記錄讀取器代理程式會依排程執行。 針對非 SQL Server 發行者,這需要 將@sync_method 設定為 character。

[ @description = ] N'description'

發行集的選擇性描述。 @description為 nvarchar(255),預設值為 NULL。

[ @status = ] N'status'

指定發行集數據是否可用。 @status為 nvarchar(8),可以是下列其中一個值。

值 Description
active 發行集數據立即可供訂閱者使用。
inactive (預設值) 第一次建立發行集時,發行集數據不適用於訂閱者(可以訂閱,但不會處理訂閱)。

Oracle 發行者不支援。

[ @independent_agent = ] N'independent_agent'

指定此發行集是否有獨立 散發代理程式。 @independent_agent為 nvarchar(5),預設值為 false。

  • 如果true為 ,則此出版物有獨立 散發代理程式。
  • 如果false為 ,發行集會使用共用 散發代理程式,而且每個 Publisher 資料庫/訂閱者資料庫組都有單一的共用代理程式。

[ @immediate_sync = ] N'immediate_sync'

指定每次執行 快照集代理程式 時,是否建立發行集的同步處理檔案。 @immediate_sync為 nvarchar(5),預設值為 false。

如果true為 ,則每次執行 快照集代理程式 時,都會建立或重新建立同步處理檔案。 如果 快照集代理程式 在建立訂閱之前完成,訂閱者就能夠立即取得同步處理檔案。 新的訂用帳戶會取得最近執行 快照集代理程式 所產生的最新同步處理檔案。 @independent_agent必須是 true@immediate_sync 為 true。 如果 false為 ,則只有在有新的訂用帳戶時,才會建立同步處理檔案。 當您以累加方式將新發行項新增至現有的發行集時,您必須為每個訂閱呼叫 sp_addsubscription 。 訂閱者在訂閱之後無法接收同步處理檔案,直到啟動和完成 快照集代理程式 為止。

[ @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 目錄。

[ @allow_push = ] N'allow_push'

指定是否可以為指定的發行集建立發送訂閱。 @allow_push為 nvarchar(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。 true Oracle 發行者不支援。

[ @autogen_sync_procs = ] N'autogen_sync_procs'

指定是否在發行者端產生更新訂閱的同步處理預存程式。 @autogen_sync_procs為 nvarchar(5),而且可以是下列其中一個值。

值 Description
true 啟用更新訂閱時自動設定。
false 在未啟用或 Oracle 發行者更新訂閱時自動設定。
NULL (預設值) 預設為 true 開啟更新訂閱時,以及 false 未啟用更新訂閱時的 。

注意

根據為@allow_queued_tran和@allow_sync_tran指定的值,將會覆寫@autogen_sync_procs使用者提供的值。

[ @retention = ] 保留期

訂用帳戶活動的保留期間,以小時為單位。 @retention為 int。 如果訂用帳戶未在保留期間內作用中,則會到期並移除。 此值可以大於發行者所使用散發資料庫的最大保留期間。 如果 0為 ,則發行集的已知訂閱永遠不會過期,並由過期的訂閱清除代理程序移除。

[ @allow_queued_tran = ] N'allow_queued_tran'

啟用或停用訂閱者端變更的佇列,直到可以在發行者端套用變更為止。 @allow_queued_tran為 nvarchar(5),預設值為 false。

  • 如果 false為 ,則訂閱者端的變更不會排入佇列。
  • true Oracle 發行者不支援。

[ @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_script為 nvarchar(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。 指定發行集快照集檔案的位置,供訂閱者 散發代理程式 或 合併代理程式 取用。 由於此屬性會針對每個發行集儲存,因此每個發行集可以有不同的 @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 時

true Oracle 發行者不支援。

[ @allow_subscription_copy = ] N'allow_subscription_copy'

啟用或停用複製訂閱此發行集的訂閱資料庫的能力。 @allow_subscription_copy為 nvarchar(5),預設值為 false。

[ @conflict_policy = ] N'conflict_policy'

指定使用佇列更新訂閱者選項時所遵循的衝突解決原則。 @conflict_policy為 nvarchar(100),而且可以是下列其中一個值。

值 Description
pub wins 發行者會贏得衝突。
sub reinit 重新初始化這項訂閱。
sub wins 訂閱者會贏得衝突。
NULL (預設值) 如果 NULL為 ,而且發行集是快照式發行集,則預設原則會 sub reinit變成 。 如果 NULL 與發行集不是快照式發行集,則預設值會 pub wins變成 。

Oracle 發行者不支援。

[ @centralized_conflicts = ] N'centralized_conflicts'

指定衝突記錄是否儲存在發行者上。 @centralized_conflicts為 nvarchar(5),預設值為 NULL。

  • 如果 true為 ,衝突記錄會儲存在發行者端。
  • 如果 false為 ,衝突記錄會同時儲存在發行者和造成衝突的訂閱者端。

Oracle 發行者不支援。

[ @conflict_retention = ] conflict_retention

指定以天為單位的衝突保留期間。 這是衝突元數據儲存在點對點事務複製和佇列更新訂閱的時間週期。 @conflict_retention為 int。

Oracle 發行者不支援。

[ @queue_type = ] N'queue_type'

指定使用哪種類型的佇列。 @queue_type是 nvarchar(10),而且可以是下列其中一個值。

值 Description
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。 只有當記錄讀取器代理程式使用現有的作業,而不是建立新的作業時,才會指定此參數。

[ @qreader_job_name = ] N'qreader_job_name'

現有代理程式作業的名稱。 @qreader_job_name為 sysname。 只有當佇列讀取器代理程式使用現有的作業,而不是建立新的作業時,才會指定此參數。

[ @publisher = ] N'publisher'

指定非 SQL Server 發行者。 @publisher為 sysname,預設值為 NULL。

將發行集新增至 SQL Server 發行者時,不應該使用@publisher 。

[ @allow_initialize_from_backup = ] N'allow_initialize_from_backup'

指出訂閱者是否可以從備份初始化這個發行集的訂閱,而不是初始快照集。 @allow_initialize_from_backup為 nvarchar(5),可以是下列其中一個值:

值 Description
true 從備份啟用初始化。
false 停用備份的初始化。
NULL (預設值) true針對點對點複寫拓撲中的發行集,以及false所有其他發行集,預設為 。

如需詳細資訊,請參閱 不使用快照集初始化交易式訂閱中手動初始化訂閱。

警告

若要避免遺漏訂閱者數據,搭配 sp_addpublication使用 @allow_initialize_from_backup = N'true' 時,一律使用 @immediate_sync = N'true'。

[ @replicate_ddl = ] replicate_ddl

指出發行集是否支援架構複寫。 @replicate_ddl為 int,SQL Server 發行者的預設值1為 ,非 0 SQL Server 發行者則為 。

  • 1 表示在發行者端執行的數據定義語言 (DDL) 語句會複寫。
  • 0 表示不會復寫 DDL 語句。

注意

Oracle Publishers 不支援結構複製。

如需詳細資訊,請參閱對發行集資料庫進行結構描述變更。

當 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_sub為 nvarchar(5),預設值為 false。 的值 true 表示發行集支援非 SQL Server 訂閱者。 當 @enabled_for_het_sub,適用下列限制:

  • @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不能是 native 或 concurrent。

如需詳細資訊,請參閱 Non-SQL Server Subscribers。

[ @p2p_conflictdetection = ] N'p2p_conflictdetection'

啟用 散發代理程式,以偵測發行集是否已啟用點對點複寫的衝突。 @p2p_conflictdetection為 nvarchar(5),預設值為 false。 如需詳細資訊,請參閱 點對點複寫中的點對點 - 衝突偵測。

[ @p2p_originator_id = ] p2p_originator_id

針對點對點拓撲中的節點指定識別碼。 @p2p_originator_id為 int,預設值為 NULL。 如果 @p2p_conflictdetection 設為TRUE,此標識符會用於衝突偵測。 指定拓撲中未使用的正數非零標識符。 如需所使用的標識碼清單,請執行 sp_help_peerconflictdetection。

[ @p2p_continue_onconflict = ] N'p2p_continue_onconflict'

判斷在偵測到衝突之後,散發代理程式 是否繼續處理變更。 @p2p_continue_onconflict為 nvarchar(5),預設值為 false。

警告

我們建議您使用的 false預設值。 當此選項設定為 true時,散發代理程式 會藉由套用來自最高原始程式標識碼之節點的衝突數據列,嘗試聚合拓撲中的數據。 此方法不保證聚合。 您應該確定拓撲在偵測到衝突之後是一致的。 如需詳細資訊,請參閱點對點複寫中的 「處理衝突」- 點對點複寫中的衝突偵測。

[ @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),可以是下列其中一個值:

值 Description
originatorid (預設值) 如果 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 用於快照式複寫和事務複製。

如果有多個發行集發行相同的資料庫物件,則只有具有複寫 、、、 和 DDL 語句之@replicate_ddl1 不過, ALTER TABLE DROP COLUMN 所有發行卸除數據行的發行集都會復寫 DDL 語句。

啟用發行集的 DDL 複寫(),若要對發行集進行非重複的 DDL 變更, = ,才能將 @replicate_ddl1為 。 發出非重複的 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

權限

只有系統管理員固定伺服器角色或db_owner固定資料庫角色的成員才能執行 sp_addpublication。 Windows 驗證 登入在資料庫中必須有代表其 Windows 用戶帳戶的用戶帳戶。 代表 Windows 群組的用戶帳戶不足。