創(chuàng)建項(xiàng)目并將其添加到發(fā)布中。此存儲(chǔ)過(guò)程在發(fā)布服務(wù)器的發(fā)布數(shù)據(jù)庫(kù)上執(zhí)行。
sp_addarticle [ @publication = ] 'publication'
,
[ @article = ] 'article'
,
[ @source_table = ] 'source_table'
[ , [ @destination_table = ] 'destination_table' ]
[ , [ @vertical_partition = ] 'vertical_partition' ]
[ , [ @type = ] 'type' ]
[ , [ @filter = ] 'filter' ]
[ , [ @sync_object = ] 'sync_object' ]
[ , [ @ins_cmd = ] 'ins_cmd' ]
[ , [ @del_cmd = ] 'del_cmd' ]
[ , [@upd_cmd = ] 'upd_cmd' ]
[ , [ @creation_script = ] 'creation_script' ]
[ , [ @description = ] 'description' ]
[ , [ @pre_creation_cmd = ] 'pre_creation_cmd' ]
[ , [ @filter_clause = ] 'filter_clause']
[ , [ @schema_option = ] schema_option ]
[ , [ @destination_owner = ] 'destination_owner' ]
[ , [ @status =] status ]
[ , [ @source_owner = ] 'source_owner' ]
[ , [ @sync_object_owner = ] 'sync_object_owner' ]
[ , [ @filter_owner = ] 'filter_owner' ]
[ , [ @source_object = ] 'source_object' ]
[ , [ @artid = ] article_ID OUTPUT ]
[ , [ @auto_identity_range = ] 'auto_identity_range' ]
[ , [ @pub_identity_range = ] pub_identity_range ]
[ , [ @identity_range = ] identity_range ]
[ , [ @threshold = ] threshold ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[@publication = ] 'publication'
是包含項(xiàng)目的發(fā)布名。該名稱在數(shù)據(jù)庫(kù)內(nèi)必須唯一。publication 的數(shù)據(jù)類型為 sysname,沒有默認(rèn)設(shè)置。
[@article = ]'article'
是項(xiàng)目名。該名稱在發(fā)布內(nèi)必須唯一。article 的數(shù)據(jù)類型為 sysname,沒有默認(rèn)設(shè)置。
[@source_table = ] 'source_table'
是由項(xiàng)目或存儲(chǔ)過(guò)程表示的基礎(chǔ)表名。source_table 的數(shù)據(jù)類型為 nvarchar(386),必須在本地 SQL Server 計(jì)算機(jī)上,必須遵從標(biāo)識(shí)符規(guī)則,而且必須是表(不是視圖或其它數(shù)據(jù)庫(kù)對(duì)象)。支持 source_table 只是為了向后兼容;改用 source_object。
[@destination_table = ] 'destination_table'
是目的(訂閱)表(如果不同于 source_table 或存儲(chǔ)過(guò)程)的名稱。destination_table 的數(shù)據(jù)類型為 sysname,默認(rèn)設(shè)置為 NULL,這表示 source_table 等于 destination_table。
[@vertical_partition = ] 'vertical_partition'
啟用和禁用表項(xiàng)目上的列篩選。vertical_partition 的數(shù)據(jù)類型為 nchar(5),默認(rèn)設(shè)置為 FALSE。false 表示沒有垂直篩選,并發(fā)布所有的列。true 清除除聲明的主鍵之外的所有列。列通過(guò) sp_articlecolumn 被添加。
[@type = ] 'type'
是項(xiàng)目類型。type 的數(shù)據(jù)類型為 sysname,可以是下列值之一。
值 | 描述 |
---|---|
logbased | 基于日志的項(xiàng)目。 |
logbased manualfilter | 帶手工篩選的基于日志的項(xiàng)目。 |
logbased manualview | 帶手工視圖的基于日志的項(xiàng)目。 |
logbased manualboth | 帶手工篩選和手工視圖的基于日志的項(xiàng)目。 |
proc exec | 將存儲(chǔ)過(guò)程執(zhí)行復(fù)制到項(xiàng)目的所有訂閱服務(wù)器。 |
serializable proc exec | 僅當(dāng)存儲(chǔ)過(guò)程在可串行事務(wù)上下文內(nèi)執(zhí)行時(shí)才復(fù)制存儲(chǔ)過(guò)程執(zhí)行。 |
NULL(默認(rèn)值) |
[@filter = ] 'filter'
是用于水平篩選表的存儲(chǔ)過(guò)程(用 FOR REPLICATION 創(chuàng)建)。filter 的數(shù)據(jù)類型為 nvarchar(386),默認(rèn)設(shè)置為 NULL。必須手工執(zhí)行 sp_articleview 和 sp_articlefilter 以創(chuàng)建視圖并篩選存儲(chǔ)過(guò)程。如果設(shè)置不是 NULL,則不創(chuàng)建存儲(chǔ)過(guò)程(假設(shè)手動(dòng)創(chuàng)建存儲(chǔ)過(guò)程)。
[@sync_object = ] 'sync_object'
是用于生成數(shù)據(jù)文件的表或視圖的名稱,而此數(shù)據(jù)文件用來(lái)表示此項(xiàng)目的快照。sync_object 的數(shù)據(jù)類型為 nvarchar(386),默認(rèn)設(shè)置為 NULL。如果是 NULL,則調(diào)用 sp_articleview 自動(dòng)創(chuàng)建用于生成輸出文件的視圖。這種情況在添加含有 sp_articlecolumn 的任意列后出現(xiàn)。如果設(shè)置不是 NULL,則不創(chuàng)建視圖(假設(shè)手動(dòng)創(chuàng)建視圖)。
[@ins_cmd = ] 'ins_cmd'
是復(fù)制項(xiàng)目的插入時(shí)使用的復(fù)制命令類型。ins_cmd 的數(shù)據(jù)類型為 nvarchar(255),可以是下列值之一。
值 | 描述 |
---|---|
NONE | 不采取任何操作。 |
CALL sp_MSins_article -或- CALL custom_stored_procedure_name (默認(rèn)) | 在訂閱服務(wù)器上調(diào)用要執(zhí)行的存儲(chǔ)過(guò)程。若要使用此復(fù)制方法,請(qǐng)使用 @schema_option 指定自動(dòng)創(chuàng)建存儲(chǔ)過(guò)程,或在項(xiàng)目的每個(gè)訂閱服務(wù)器的目的數(shù)據(jù)庫(kù)中創(chuàng)建指定的存儲(chǔ)過(guò)程。custom_stored_procedure 是用戶創(chuàng)建的存儲(chǔ)過(guò)程名稱,sp_Msins_article 包含代替參數(shù)的 _article 部分的項(xiàng)目名稱。例如,對(duì)于 Categories 表,該參數(shù)將是 CALL sp_Msins_Categories。 |
SQL 或 NULL | 復(fù)制 INSERT 語(yǔ)句。為 INSERT 語(yǔ)句提供項(xiàng)目中發(fā)布的所有列值。在插入上復(fù)制該命令:
|
[@del_cmd = ] 'del_cmd'
是復(fù)制項(xiàng)目的刪除時(shí)使用的復(fù)制命令類型。del_cmd 的數(shù)據(jù)類型為 nvarchar(255),可以是下列值之一。
值 | 描述 |
---|---|
NONE | 不采取任何操作。 |
CALL sp_MSdel_article -or- CALL custom_stored_procedure_name (默認(rèn)) | 在訂閱服務(wù)器上調(diào)用要執(zhí)行的存儲(chǔ)過(guò)程。若要使用此復(fù)制方法,請(qǐng)使用 @schema_option 指定自動(dòng)創(chuàng)建存儲(chǔ)過(guò)程,或在項(xiàng)目的每個(gè)訂閱服務(wù)器的目的數(shù)據(jù)庫(kù)中創(chuàng)建指定的存儲(chǔ)過(guò)程。custom_stored_procedure 是用戶創(chuàng)建的存儲(chǔ)過(guò)程名稱,sp_Msins_article 包含代替參數(shù)的 _article 部分的項(xiàng)目名稱。例如,對(duì)于 Categories 表,該參數(shù)將是 CALL sp_Msins_Categories。 |
XCALL sp_MSdel_article | 采用 XCALL 樣式參數(shù)調(diào)用存儲(chǔ)過(guò)程。若要使用這種復(fù)制方法,請(qǐng)用 @schema_option 指定自動(dòng)創(chuàng)建存儲(chǔ)過(guò)程,或在項(xiàng)目的每個(gè)訂閱服務(wù)器的目的數(shù)據(jù)庫(kù)中創(chuàng)建指定的存儲(chǔ)過(guò)程。 |
SQL 或 NULL | 復(fù)制 DELETE 語(yǔ)句。為 DELETE 語(yǔ)句提供所有主鍵列值。在刪除上復(fù)制該命令:
|
說(shuō)明 CALL、MCALL 和 XCALL 語(yǔ)法對(duì)傳播到訂閱服務(wù)器的數(shù)據(jù)量有不同的處理。CALL 語(yǔ)法傳遞所有已插入或已刪除的列的所有值。MCALL 語(yǔ)法只傳遞受影響的列的值。XCALL 語(yǔ)法傳遞所有列的值(無(wú)論更改與否),其中包括列在被更改前的值。有關(guān)更多信息,請(qǐng)參見在項(xiàng)目中使用自定義存儲(chǔ)過(guò)程。
[@upd_cmd = ] 'upd_cmd'
是復(fù)制項(xiàng)目的更新時(shí)使用的復(fù)制命令類型。upd_cmd 的數(shù)據(jù)類型為 nvarchar(255),可以是下列值之一。
值 | 描述 |
---|---|
NONE | 不采取任何操作。 |
CALL sp_MSupd_article | 在訂閱服務(wù)器上調(diào)用要執(zhí)行的存儲(chǔ)過(guò)程。若要使用這種復(fù)制方法,請(qǐng)用 @schema_option 指定自動(dòng)創(chuàng)建存儲(chǔ)過(guò)程,或在項(xiàng)目的每個(gè)訂閱服務(wù)器的目的數(shù)據(jù)庫(kù)中創(chuàng)建指定的存儲(chǔ)過(guò)程。 |
MCALL sp_MSupd_article(默認(rèn)值) | 采用 MCALL 樣式參數(shù)調(diào)用存儲(chǔ)過(guò)程。若要使用此復(fù)制方法,請(qǐng)使用 @schema_option 指定自動(dòng)創(chuàng)建存儲(chǔ)過(guò)程,或在項(xiàng)目的每個(gè)訂閱服務(wù)器的目的數(shù)據(jù)庫(kù)中創(chuàng)建指定的存儲(chǔ)過(guò)程。custom_stored_procedure 是用戶創(chuàng)建的存儲(chǔ)過(guò)程名稱,sp_Msins_article 包含代替參數(shù)的 _article 部分的項(xiàng)目名稱。例如,對(duì)于 Categories 表,該參數(shù)將是 CALL sp_Msins_Categories。 |
XCALL sp_MSupd_article | 采用 XCALL 樣式參數(shù)調(diào)用存儲(chǔ)過(guò)程。若要使用這種復(fù)制方法,請(qǐng)用 @schema_option 指定自動(dòng)創(chuàng)建存儲(chǔ)過(guò)程,或在項(xiàng)目的每個(gè)訂閱服務(wù)器的目的數(shù)據(jù)庫(kù)中創(chuàng)建指定的存儲(chǔ)過(guò)程。 |
SQL 或 NULL | 復(fù)制 UPDATE 語(yǔ)句。UPDATE 語(yǔ)句在所有的列值和主鍵列值上提供。在更新上復(fù)制該命令:
|
說(shuō)明 CALL、MCALL 和 XCALL 語(yǔ)法對(duì)傳播到訂閱服務(wù)器的數(shù)據(jù)量有不同的處理。CALL 語(yǔ)法傳遞所有已插入或已刪除的列的所有值。MCALL 語(yǔ)法只傳遞受影響的列的值。XCALL 語(yǔ)法傳遞所有列的值(無(wú)論更改與否),其中包括列在被更改前的值。有關(guān)更多信息,請(qǐng)參見在項(xiàng)目中使用自定義存儲(chǔ)過(guò)程。
[@creation_script = ] 'creation_script'
是用于創(chuàng)建目標(biāo)表的項(xiàng)目架構(gòu)腳本的路徑和名稱。creation_script 的數(shù)據(jù)類型為 nvarchar(127),默認(rèn)設(shè)置為 NULL。
[@description = ] 'description'
是項(xiàng)目的描述項(xiàng)。description 的數(shù)據(jù)類型為 nvarchar(255),默認(rèn)設(shè)置為 NULL。
[@pre_creation_cmd = ] 'pre_creation_cmd'
當(dāng)應(yīng)用該項(xiàng)目的快照時(shí),指定系統(tǒng)在訂閱服務(wù)器上檢測(cè)到同名的現(xiàn)有對(duì)象時(shí)所應(yīng)采取的操作。pre_creation_cmd 的數(shù)據(jù)類型為 nvarchar(10),可以是下列值之一。
值 | 描述 |
---|---|
none | 不使用命令。 |
delete | 刪除目的表。 |
drop(默認(rèn)值) | 除去目的表。 |
truncate | 截?cái)嗄康谋?。?duì) ODBC 或 OLE DB 訂閱服務(wù)器無(wú)效。 |
[@filter_clause = ] 'filter_clause'
是定義水平篩選的 (WHERE) 限制子句。輸入該限制子句時(shí),省略關(guān)鍵字 WHERE。filter_clause 的數(shù)據(jù)類型為 ntext,默認(rèn)設(shè)置為 NULL。有關(guān)更多信息,請(qǐng)參見自動(dòng)生成篩選。
[@schema_option = ] schema_option
是給定項(xiàng)目的架構(gòu)生成選項(xiàng)的位掩碼。該參數(shù)指定在目的數(shù)據(jù)庫(kù)中為所有 CALL/MCALL/XCALL 自動(dòng)創(chuàng)建此存儲(chǔ)過(guò)程。schema_option 的數(shù)據(jù)類型為 binary(8),可以是下列值的組合。如果該值是 NULL,則系統(tǒng)將為該項(xiàng)目自動(dòng)生成有效架構(gòu)選項(xiàng)。"注釋"中給出的表顯示基于項(xiàng)目類型和復(fù)制類型的組合而選擇的值。
值 | 描述 |
---|---|
0x00 | 禁止由快照代理程序創(chuàng)建腳本并使用 creation_script。 |
0x01 | 生成對(duì)象創(chuàng)建(CREATE TABLE、CREATE PROCEDURE 等)。該值是存儲(chǔ)過(guò)程項(xiàng)目的默認(rèn)值。 |
0x02 | 生成項(xiàng)目的自定義存儲(chǔ)過(guò)程(如果已定義)。 |
0x10 | 生成對(duì)應(yīng)的聚集索引。 |
0x20 | 將用戶定義數(shù)據(jù)類型轉(zhuǎn)換為基本數(shù)據(jù)類型。 |
0x40 | 生成對(duì)應(yīng)的非聚集索引。 |
0x80 | 在主鍵上包含聲明引用完整性。 |
0x100 | 如果已定義,則復(fù)制表項(xiàng)目上的用戶觸發(fā)器。 |
0x200 | 復(fù)制外鍵約束。如果引用的表不是發(fā)布的一部分,則將不復(fù)制已發(fā)布表上的所有外鍵約束。 |
0x400 | 復(fù)制檢查約束。 |
0x800 | 復(fù)制默認(rèn)值。 |
0x1000 | 復(fù)制列級(jí)排序規(guī)則。 |
0x2000 | 復(fù)制與已發(fā)布項(xiàng)目源對(duì)象關(guān)聯(lián)的擴(kuò)展的屬性。 |
0x4000 | 如果在表項(xiàng)目上定義了唯一鍵,則復(fù)制唯一鍵。 |
0x8000 | 使用 ALTER TABLE 語(yǔ)句將表項(xiàng)目上的主鍵和唯一鍵作為約束復(fù)制。 |
NULL |
并非所有的 @schema_option 值對(duì)每個(gè)復(fù)制類型和項(xiàng)目類型都有效。"注釋"中給出的"有效架構(gòu)選項(xiàng)"表顯示可基于項(xiàng)目類型和復(fù)制類型的組合進(jìn)行選擇的有效架構(gòu)選項(xiàng)。
[@destination_owner = ] 'destination_owner'
是目的對(duì)象所有者的名稱。destination_owner 的數(shù)據(jù)類型為 sysname,默認(rèn)設(shè)置為 NULL。如果 ODBC 訂閱服務(wù)器可以訂閱發(fā)布,則 destination_owner 必須為 NULL。
[@status = ] status
是 article 選項(xiàng)的位掩碼。status 的數(shù)據(jù)類型為 tinyint,可以是下列值之一。
值 | 描述 |
---|---|
0 | 沒有附加屬性。 |
8 | 在 INSERT 語(yǔ)句中包含列名。 |
16(默認(rèn)值) | 使用參數(shù)化語(yǔ)句。 |
24 | 在 INSERT 語(yǔ)句中包含列名,并使用參數(shù)化語(yǔ)句。 |
[@source_owner = ] 'source_owner'
是源對(duì)象的所有者。source_owner 的數(shù)據(jù)類型為 sysname,默認(rèn)設(shè)置為 NULL。
[@sync_object_owner = ] 'sync_object_owner'
是同步對(duì)象的所有者。sync_object_owner 的數(shù)據(jù)類型為 sysname,默認(rèn)設(shè)置為 NULL。
[@filter_owner = ] 'filter_owner'
是篩選的所有者。filter_owner 的數(shù)據(jù)類型為 sysname,默認(rèn)設(shè)置為 NULL。
[@source_object = ] 'source_object'
是要發(fā)布的表或存儲(chǔ)過(guò)程。source_object 的數(shù)據(jù)類型為 sysname,默認(rèn)設(shè)置為 NULL。如果 source_table 是 NULL,則 source_object 不能是 NULL。應(yīng)使用 source_object 而非 source_table。提供 source_table 是為了向后與 SQL Server 6.x 發(fā)布服務(wù)器兼容。
[@artid = ] article_ID OUTPUT
是新項(xiàng)目的項(xiàng)目 ID。article_ID 的數(shù)據(jù)類型為 int,默認(rèn)設(shè)置為 NULL,它是 OUTPUT 參數(shù)。
[@auto_identity_range = ] 'auto_identity_range'
當(dāng)創(chuàng)建發(fā)布時(shí),啟用和禁用對(duì)該發(fā)布的自動(dòng)標(biāo)識(shí)范圍處理。auto_identity_range 的數(shù)據(jù)類型為 nvarchar(5),默認(rèn)設(shè)置為 FALSE。true 啟用自動(dòng)標(biāo)識(shí)范圍處理;false 則禁用它。注意標(biāo)識(shí)范圍管理只適用于允許即時(shí)更新或排隊(duì)更新的快照發(fā)布或事務(wù)發(fā)布。有關(guān)更多信息,請(qǐng)參見管理標(biāo)識(shí)值。
[@pub_identity_range = ] pub_identity_range
控制發(fā)布服務(wù)器上的范圍大?。ㄈ绻?xiàng)目的 auto_identity_range 已設(shè)置為 true)。pub_identity_range 的數(shù)據(jù)類型為 bigint,默認(rèn)設(shè)置為 NULL。
[@identity_range = ] identity_range
控制訂閱服務(wù)器上的范圍大?。ㄈ绻?xiàng)目的 auto_identity_range 已設(shè)置為 true)。identity_range 的數(shù)據(jù)類型為 bigint,默認(rèn)設(shè)置為 NULL。當(dāng) auto_identity_range 設(shè)置為 true 時(shí)使用該參數(shù)。
[@threshold = ] threshold
是控制分發(fā)代理程序何時(shí)指派新標(biāo)識(shí)范圍的百分比值。當(dāng)使用在 threshold 中指定的百分比值時(shí),分發(fā)代理程序創(chuàng)建新標(biāo)識(shí)范圍。threshold 的數(shù)據(jù)類型為 bigint,默認(rèn)設(shè)置為 NULL。當(dāng) auto_identity_range 設(shè)置為 true 時(shí)使用該參數(shù)。
[@force_invalidate_snapshot = ] force_invalidate_snapshot
確認(rèn)此存儲(chǔ)過(guò)程所采取的操作可能會(huì)使現(xiàn)有的快照無(wú)效。force_invalidate_snapshot 的數(shù)據(jù)類型為 bit,默認(rèn)設(shè)置為 0。0 指定添加項(xiàng)目不會(huì)導(dǎo)致快照無(wú)效。如果存儲(chǔ)過(guò)程檢測(cè)到更改確實(shí)需要新快照,則會(huì)發(fā)生錯(cuò)誤,且不會(huì)進(jìn)行任何更改。1 指定添加項(xiàng)目可能導(dǎo)致快照無(wú)效,且如果有現(xiàn)有訂閱需要新快照,則提供適當(dāng)?shù)臋?quán)限,使現(xiàn)有快照被標(biāo)記為廢棄并生成新快照。
0(成功)或 1(失敗)
sp_addarticle 用于快照復(fù)制或事務(wù)復(fù)制。
如果 vertical_partition 設(shè)置為 true,則 sp_addarticle 將視圖的創(chuàng)建推遲到調(diào)用 sp_articleview 時(shí)(添加最后一個(gè) sp_articlecolumn 之后)。
如果發(fā)布允許即時(shí)更新訂閱,且已發(fā)布表沒有 uniqueidentifier 列,則 sp_addarticle 自動(dòng)將 uniqueidentifier 列添加到表中。
該表描述如果用戶傳遞的是 NULL 值,則為存儲(chǔ)過(guò)程選擇的 @schema_option 默認(rèn)值。默認(rèn)值基于表的第一行中顯示的復(fù)制類型和第一列中顯示的項(xiàng)目類型。空單元表示無(wú)效的項(xiàng)目類型和復(fù)制類型組合,因而沒有默認(rèn)值。
項(xiàng)目類型 | 復(fù)制類型 | |
---|---|---|
事務(wù)復(fù)制 | 快照復(fù)制 | |
logbased | 0xF3 | 0x71 |
logbased manualfilter | 0xF3 | 0x71 |
logbased manualview | 0xF3 | 0x71 |
indexed view logbased | 0xF3 | 0x71 |
indexed view logbased manualfilter | 0xF3 | 0x71 |
indexed view logbased manualview | 0xF3 | 0x71 |
indexed view logbase manualboth | 0xF3 | 0x71 |
proc exec | 0x01 | 0x01 |
serialized proc exec | 0x01 | 0x01 |
proc schema only | 0x01 | 0x01 |
view schema only | 0x01 | 0x01 |
func schema only | 0x01 | 0x01 |
indexed view schema only | 0x01 | 0x01 |
table |
說(shuō)明 如果為排隊(duì)更新啟用了發(fā)布,則 @schema_option 值 0x8000 和 0x0080 將被添加到下表所顯示的默認(rèn)值中。
有效架構(gòu)選項(xiàng)表
項(xiàng)目類型 | 復(fù)制類型 | |
---|---|---|
事務(wù)復(fù)制 | 快照復(fù)制 | |
logbased | 所有選項(xiàng) | 除 0x02 之外的所有選項(xiàng) |
logbased manualfilter | 所有選項(xiàng) | 除 0x02 之外的所有選項(xiàng) |
logbased manualview | 所有選項(xiàng) | 除 0x02 之外的所有選項(xiàng) |
indexed view logbased | 所有選項(xiàng) | 除 0x02 之外的所有選項(xiàng) |
indexed view logbased manualfilter | 所有選項(xiàng) | 除 0x02 之外的所有選項(xiàng) |
indexed view logbased manualview | 所有選項(xiàng) | 除 0x02 之外的所有選項(xiàng) |
indexed view logbase manualboth | 所有選項(xiàng) | 除 0x02 之外的所有選項(xiàng) |
proc exec | 0x01 和 0x2000 | 0x01 和 0x2000 |
serialized proc exec | 0x01 和 0x2000 | 0x01 和 0x2000 |
proc schema only | 0x01 和 0x2000 | 0x01 和 0x2000 |
view schema only | 0x01、0x0100 和 0x2000 | 0x01、0x0100 和 0x2000 |
func schema only | 0x01 和 0x2000 | 0x01 和 0x2000 |
indexed view schema only | 0x01、0x10、0x040、0x0100 和 0x2000 | 0x01、0x10、0x040、0x0100 和 0x2000 |
table |
說(shuō)明 對(duì)于排隊(duì)更新發(fā)布,必須啟用 @schema_option 值 0x8000 和 0x80。
只有 sysadmin 固定服務(wù)器角色成員和 db_owner 固定數(shù)據(jù)庫(kù)角色成員才能執(zhí)行 sp_addarticle。
相關(guān)文章