Transact-SQL 参考

sp_addarticle

创建项目并将其添加到发布中。此存储过程在发布服务器的发布数据库上执行。

语法

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'

是包含项目的发布名。该名称在数据库内必须唯一。publication 的数据类型为 sysname,没有默认设置。

[@article = ]'article'

是项目名。该名称在发布内必须唯一。article 的数据类型为 sysname,没有默认设置。

[@source_table = ] 'source_table'

是由项目或存储过程表示的基础表名。source_table 的数据类型为 nvarchar(386),必须在本地 SQL Server 计算机上,必须遵从标识符规则,而且必须是表(不是视图或其它数据库对象)。支持 source_table 只是为了向后兼容;改用 source_object

[@destination_table = ] 'destination_table'

是目的(订阅)表(如果不同于 source_table 或存储过程)的名称。destination_table 的数据类型为 sysname,默认设置为 NULL,这表示 source_table 等于 destination_table

[@vertical_partition = ] 'vertical_partition'

启用和禁用表项目上的列筛选。vertical_partition 的数据类型为 nchar(5),默认设置为 FALSE。false 表示没有垂直筛选,并发布所有的列。true 清除除声明的主键之外的所有列。列通过 sp_articlecolumn 被添加。

[@type = ] 'type'

是项目类型。type 的数据类型为 sysname,可以是下列值之一。

描述
logbased 基于日志的项目。
logbased manualfilter 带手工筛选的基于日志的项目。
logbased manualview 带手工视图的基于日志的项目。
logbased manualboth 带手工筛选和手工视图的基于日志的项目。
proc exec 将存储过程执行复制到项目的所有订阅服务器。
serializable proc exec 仅当存储过程在可串行事务上下文内执行时才复制存储过程执行。
NULL(默认值)

[@filter = ] 'filter'

是用于水平筛选表的存储过程(用 FOR REPLICATION 创建)。filter 的数据类型为 nvarchar(386),默认设置为 NULL。必须手工执行 sp_articleviewsp_articlefilter 以创建视图并筛选存储过程。如果设置不是 NULL,则不创建存储过程(假设手动创建存储过程)。

[@sync_object = ] 'sync_object'

是用于生成数据文件的表或视图的名称,而此数据文件用来表示此项目的快照。sync_object 的数据类型为 nvarchar(386),默认设置为 NULL。如果是 NULL,则调用 sp_articleview 自动创建用于生成输出文件的视图。这种情况在添加含有 sp_articlecolumn 的任意列后出现。如果设置不是 NULL,则不创建视图(假设手动创建视图)。

[@ins_cmd = ] 'ins_cmd'

是复制项目的插入时使用的复制命令类型。ins_cmd 的数据类型为 nvarchar(255),可以是下列值之一。

描述
NONE 不采取任何操作。
CALL sp_MSins_article

-或-

CALL custom_stored_procedure_name

(默认)

在订阅服务器上调用要执行的存储过程。若要使用此复制方法,请使用 @schema_option 指定自动创建存储过程,或在项目的每个订阅服务器的目的数据库中创建指定的存储过程。custom_stored_procedure 是用户创建的存储过程名称,sp_Msins_article 包含代替参数的 _article 部分的项目名称。例如,对于 Categories 表,该参数将是 CALL sp_Msins_Categories。
SQL 或 NULL 复制 INSERT 语句。为 INSERT 语句提供项目中发布的所有列值。在插入上复制该命令:
INSERT INTO <table name> VALUES (c1value, c2value, c3value, ..., cnvalue)

[@del_cmd = ] 'del_cmd'

是复制项目的删除时使用的复制命令类型。del_cmd 的数据类型为 nvarchar(255),可以是下列值之一。

描述
NONE 不采取任何操作。
CALL sp_MSdel_article -or-

CALL custom_stored_procedure_name

(默认)

在订阅服务器上调用要执行的存储过程。若要使用此复制方法,请使用 @schema_option 指定自动创建存储过程,或在项目的每个订阅服务器的目的数据库中创建指定的存储过程。custom_stored_procedure 是用户创建的存储过程名称,sp_Msins_article 包含代替参数的 _article 部分的项目名称。例如,对于 Categories 表,该参数将是 CALL sp_Msins_Categories。
XCALL sp_MSdel_article 采用 XCALL 样式参数调用存储过程。若要使用这种复制方法,请用 @schema_option 指定自动创建存储过程,或在项目的每个订阅服务器的目的数据库中创建指定的存储过程。
SQL 或 NULL 复制 DELETE 语句。为 DELETE 语句提供所有主键列值。在删除上复制该命令:
DELETE FROM <table name> WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue

说明  CALL、MCALL 和 XCALL 语法对传播到订阅服务器的数据量有不同的处理。CALL 语法传递所有已插入或已删除的列的所有值。MCALL 语法只传递受影响的列的值。XCALL 语法传递所有列的值(无论更改与否),其中包括列在被更改前的值。有关更多信息,请参见在项目中使用自定义存储过程

[@upd_cmd = ] 'upd_cmd'

是复制项目的更新时使用的复制命令类型。upd_cmd 的数据类型为 nvarchar(255),可以是下列值之一。

描述
NONE 不采取任何操作。
CALL sp_MSupd_article 在订阅服务器上调用要执行的存储过程。若要使用这种复制方法,请用 @schema_option 指定自动创建存储过程,或在项目的每个订阅服务器的目的数据库中创建指定的存储过程。
MCALL sp_MSupd_article(默认值) 采用 MCALL 样式参数调用存储过程。若要使用此复制方法,请使用 @schema_option 指定自动创建存储过程,或在项目的每个订阅服务器的目的数据库中创建指定的存储过程。custom_stored_procedure 是用户创建的存储过程名称,sp_Msins_article 包含代替参数的 _article 部分的项目名称。例如,对于 Categories 表,该参数将是 CALL sp_Msins_Categories。
XCALL sp_MSupd_article 采用 XCALL 样式参数调用存储过程。若要使用这种复制方法,请用 @schema_option 指定自动创建存储过程,或在项目的每个订阅服务器的目的数据库中创建指定的存储过程。
SQL 或 NULL 复制 UPDATE 语句。UPDATE 语句在所有的列值和主键列值上提供。在更新上复制该命令:
UPDATE <table name> SET c1 = c1value, SET c2 = c2value, SET cn = cnvalue WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue

说明  CALL、MCALL 和 XCALL 语法对传播到订阅服务器的数据量有不同的处理。CALL 语法传递所有已插入或已删除的列的所有值。MCALL 语法只传递受影响的列的值。XCALL 语法传递所有列的值(无论更改与否),其中包括列在被更改前的值。有关更多信息,请参见在项目中使用自定义存储过程

[@creation_script = ] 'creation_script'

是用于创建目标表的项目架构脚本的路径和名称。creation_script 的数据类型为 nvarchar(127),默认设置为 NULL。

[@description = ] 'description'

是项目的描述项。description 的数据类型为 nvarchar(255),默认设置为 NULL。

[@pre_creation_cmd = ] 'pre_creation_cmd'

当应用该项目的快照时,指定系统在订阅服务器上检测到同名的现有对象时所应采取的操作。pre_creation_cmd 的数据类型为 nvarchar(10),可以是下列值之一。

描述
none 不使用命令。
delete 删除目的表。
drop(默认值) 除去目的表。
truncate 截断目的表。对 ODBC 或 OLE DB 订阅服务器无效。

[@filter_clause = ] 'filter_clause'

是定义水平筛选的 (WHERE) 限制子句。输入该限制子句时,省略关键字 WHERE。filter_clause 的数据类型为 ntext,默认设置为 NULL。有关更多信息,请参见自动生成筛选

[@schema_option = ] schema_option

是给定项目的架构生成选项的位掩码。该参数指定在目的数据库中为所有 CALL/MCALL/XCALL 自动创建此存储过程。schema_option 的数据类型为 binary(8),可以是下列值的组合。如果该值是 NULL,则系统将为该项目自动生成有效架构选项。"注释"中给出的表显示基于项目类型和复制类型的组合而选择的值。

描述
0x00 禁止由快照代理程序创建脚本并使用 creation_script
0x01 生成对象创建(CREATE TABLE、CREATE PROCEDURE 等)。该值是存储过程项目的默认值。
0x02 生成项目的自定义存储过程(如果已定义)。
0x10 生成对应的聚集索引。
0x20 将用户定义数据类型转换为基本数据类型。
0x40 生成对应的非聚集索引。
0x80 在主键上包含声明引用完整性。
0x100 如果已定义,则复制表项目上的用户触发器。
0x200 复制外键约束。如果引用的表不是发布的一部分,则将不复制已发布表上的所有外键约束。
0x400 复制检查约束。
0x800 复制默认值。
0x1000 复制列级排序规则。
0x2000 复制与已发布项目源对象关联的扩展的属性。
0x4000 如果在表项目上定义了唯一键,则复制唯一键。
0x8000 使用 ALTER TABLE 语句将表项目上的主键和唯一键作为约束复制。
NULL  

并非所有的 @schema_option 值对每个复制类型和项目类型都有效。"注释"中给出的"有效架构选项"表显示可基于项目类型和复制类型的组合进行选择的有效架构选项。

[@destination_owner = ] 'destination_owner'

是目的对象所有者的名称。destination_owner 的数据类型为 sysname,默认设置为 NULL。如果 ODBC 订阅服务器可以订阅发布,则 destination_owner 必须为 NULL。

[@status = ] status

article 选项的位掩码。status 的数据类型为 tinyint,可以是下列值之一。

描述
0 没有附加属性。
8 在 INSERT 语句中包含列名。
16(默认值) 使用参数化语句。
24 在 INSERT 语句中包含列名,并使用参数化语句。

[@source_owner = ] 'source_owner'

是源对象的所有者。source_owner 的数据类型为 sysname,默认设置为 NULL。

[@sync_object_owner = ] 'sync_object_owner'

是同步对象的所有者。sync_object_owner 的数据类型为 sysname,默认设置为 NULL。

[@filter_owner = ] 'filter_owner'

是筛选的所有者。filter_owner 的数据类型为 sysname,默认设置为 NULL。

[@source_object = ] 'source_object'

是要发布的表或存储过程。source_object 的数据类型为 sysname,默认设置为 NULL。如果 source_table 是 NULL,则 source_object 不能是 NULL。应使用 source_object 而非 source_table。提供 source_table 是为了向后与 SQL Server 6.x 发布服务器兼容。

[@artid = ] article_ID OUTPUT

是新项目的项目 ID。article_ID 的数据类型为 int,默认设置为 NULL,它是 OUTPUT 参数。

[@auto_identity_range = ] 'auto_identity_range'

当创建发布时,启用和禁用对该发布的自动标识范围处理。auto_identity_range 的数据类型为 nvarchar(5),默认设置为 FALSE。true 启用自动标识范围处理;false 则禁用它。注意标识范围管理只适用于允许即时更新或排队更新的快照发布或事务发布。有关更多信息,请参见管理标识值

[@pub_identity_range = ] pub_identity_range

控制发布服务器上的范围大小(如果项目的 auto_identity_range 已设置为 true)。pub_identity_range 的数据类型为 bigint,默认设置为 NULL。

[@identity_range = ] identity_range

控制订阅服务器上的范围大小(如果项目的 auto_identity_range 已设置为 true)。identity_range 的数据类型为 bigint,默认设置为 NULL。当 auto_identity_range 设置为 true 时使用该参数。

[@threshold = ] threshold

是控制分发代理程序何时指派新标识范围的百分比值。当使用在 threshold 中指定的百分比值时,分发代理程序创建新标识范围。threshold 的数据类型为 bigint,默认设置为 NULL。当 auto_identity_range 设置为 true 时使用该参数。

[@force_invalidate_snapshot = ] force_invalidate_snapshot

确认此存储过程所采取的操作可能会使现有的快照无效。force_invalidate_snapshot 的数据类型为 bit,默认设置为 0。0 指定添加项目不会导致快照无效。如果存储过程检测到更改确实需要新快照,则会发生错误,且不会进行任何更改。1 指定添加项目可能导致快照无效,且如果有现有订阅需要新快照,则提供适当的权限,使现有快照被标记为废弃并生成新快照。

返回代码值

0(成功)或 1(失败)

注释

sp_addarticle 用于快照复制或事务复制。

如果 vertical_partition 设置为 true,则 sp_addarticle 将视图的创建推迟到调用 sp_articleview 时(添加最后一个 sp_articlecolumn 之后)。

如果发布允许即时更新订阅,且已发布表没有 uniqueidentifier 列,则 sp_addarticle 自动将 uniqueidentifier 列添加到表中。

该表描述如果用户传递的是 NULL 值,则为存储过程选择的 @schema_option 默认值。默认值基于表的第一行中显示的复制类型和第一列中显示的项目类型。空单元表示无效的项目类型和复制类型组合,因而没有默认值。

项目类型 复制类型
  事务复制 快照复制
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    

说明  如果为排队更新启用了发布,则 @schema_option 值 0x8000 和 0x0080 将被添加到下表所显示的默认值中。

有效架构选项表

项目类型 复制类型
  事务复制 快照复制
logbased 所有选项 除 0x02 之外的所有选项
logbased manualfilter 所有选项 除 0x02 之外的所有选项
logbased manualview 所有选项 除 0x02 之外的所有选项
indexed view logbased 所有选项 除 0x02 之外的所有选项
indexed view logbased manualfilter 所有选项 除 0x02 之外的所有选项
indexed view logbased manualview 所有选项 除 0x02 之外的所有选项
indexed view logbase manualboth 所有选项 除 0x02 之外的所有选项
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    

说明  对于排队更新发布,必须启用 @schema_option 值 0x8000 和 0x80。

权限

只有 sysadmin 固定服务器角色成员和 db_owner 固定数据库角色成员才能执行 sp_addarticle

请参见

增强事务复制性能

sp_addpublication

sp_articlecolumn

sp_articlefilter

sp_articleview

sp_changearticle

sp_changepublication

sp_droparticle

sp_droppublication

sp_enumfullsubscribers

sp_helparticle

sp_helparticlecolumns

sp_helppublication

系统存储过程