sp_addarticle (Transact-SQL)
更新日期: 2006 年 4 月 14 日
创建项目并将其添加到发布中。此存储过程在发布服务器的发布数据库中执行。
语法
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 ]
[ , [ @use_default_datatypes = ] use_default_datatypes
[ , [ @identityrangemanagementoption = ] identityrangemanagementoption ]
[ , [ @publisher = ] 'publisher' ]
[ , [ @fire_triggers_on_snapshot = ] 'fire_triggers_on_snapshot' ]
参数
- [ @publication = ] 'publication'
包含项目的发布的名称。该名称在数据库中必须是唯一的。publication 的数据类型为 sysname,无默认值。
- [ @article = ] 'article'
项目的名称。该名称在发布中必须是唯一的。article 的数据类型为 sysname,无默认值。
- [ @source_table = ] 'source_table'
该参数已不推荐使用,支持它是为了让脚本具有向后兼容性;请改用 source_object。Oracle 发布服务器不支持该参数。
- [ @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,可以是下列值之一:值 说明 aggregate schema only
仅具有架构的聚合函数。
func schema only
仅具有架构的函数。
indexed view logbased
基于日志的索引视图项目。Oracle 发布服务器不支持。对于此类型的项目,不需要单独发布基表。
indexed view logbased manualboth
具有手动筛选器和手动视图并且基于日志的索引视图项目。该选项需要指定 sync_object 和 filter 参数。对于此类型的项目,不需要单独发布基表。Oracle 发布服务器不支持。
indexed view logbased manualfilter
具有手动筛选器并且基于日志的索引视图项目。该选项需要指定 sync_object 和 filter 参数。对于此类型的项目,不需要单独发布基表。Oracle 发布服务器不支持。
indexed view logbased manualview
具有手动视图并且基于日志的索引视图项目。该选项需要指定 sync_object 参数。对于此类型的项目,不需要单独发布基表。Oracle 发布服务器不支持。
indexed view schema only
仅具有架构的索引视图。对于此类型的项目,还必须发布基表。
logbased(默认值)
基于日志的项目。
logbased manualboth
具有手动筛选器和手动视图并且基于日志的项目。该选项需要指定 sync_object 和 filter 参数。Oracle 发布服务器不支持。
logbased manualfilter
具有手动筛选器并且基于日志的项目。该选项需要指定 sync_object 和 filter 参数。Oracle 发布服务器不支持。
logbased manualview
具有手动视图并且基于日志的项目。该选项需要指定 sync_object 参数。Oracle 发布服务器不支持。
proc exec
将存储过程的执行复制到项目的所有订阅服务器。Oracle 发布服务器不支持。
proc schema only
仅具有架构的过程。Oracle 发布服务器不支持。
serializable proc exec
仅当存储过程在可串行事务上下文内执行时才复制存储过程的执行。Oracle 发布服务器不支持。
view schema only
仅具有架构的视图。Oracle 发布服务器不支持。使用此选项时,还必须发布基表。
- [ @filter = ] 'filter'
用来水平筛选表的存储过程(用 FOR REPLICATION 创建)。filter 的数据类型为 nvarchar(386),默认值为 NULL。必须手动执行 sp_articleview 和 sp_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_table(默认值)
- 或 -
CALL custom_stored_procedure_name
在订阅服务器中调用要执行的存储过程。若要使用该复制方法,请使用 schema_option 来指定自动创建存储过程,或在项目的每个订阅服务器的目标数据库中创建指定的存储过程。custom_stored_procedure 是用户创建的存储过程的名称。sp_MSins_table 包含目标表的名称,用于代替参数的 _table 部分。如果指定了 destination_owner,则它将置于目标表名称之前。例如,对于订阅服务器中 Production 架构拥有的 ProductCategory 表,该参数应为
CALL sp_MSins_ProductionProductCategory
。对于对等复制拓扑中的项目,_table 后将追加 GUID 值。对于更新订阅服务器,不支持指定 custom_stored_procedure。SQL 或 NULL
复制 INSERT 语句。需要为 INSERT 语句提供项目中发布的所有列的值。对插入复制以下命令:
INSERT INTO <table name> VALUES (c1value, c2value, c3value, ..., cnvalue)
有关详细信息,请参阅指定如何传播事务性项目的更改。
[ @del_cmd =] 'del_cmd'
复制该项目的删除时所使用的复制命令类型。del_cmd 的数据类型为 nvarchar(255),可以是下列值之一:值 说明 NONE
不执行任何操作。
CALLsp_MSdel_table(默认值)
- 或 -
CALL custom_stored_procedure_name
在订阅服务器中调用要执行的存储过程。若要使用该复制方法,请使用 schema_option 来指定自动创建存储过程,或在项目的每个订阅服务器的目标数据库中创建指定的存储过程。custom_stored_procedure 是用户创建的存储过程的名称。sp_MSdel_table 包含目标表的名称,用于代替参数的 _table 部分。如果指定了 destination_owner,则它将置于目标表名称之前。例如,对于订阅服务器中 Production 架构拥有的 ProductCategory 表,该参数应为
CALL sp_MSdel_ProductionProductCategory
。对于对等复制拓扑中的项目,_table 后将追加 GUID 值。对于更新订阅服务器,不支持指定 custom_stored_procedure。XCALL sp_MSdel_table
-或-
XCALL custom_stored_procedure_name
采用 XCALL 样式参数调用存储过程。若要使用该复制方法,请使用 schema_option 来指定自动创建存储过程,或在项目的每个订阅服务器的目标数据库中创建指定的存储过程。对于更新订阅服务器,不允许指定用户创建的存储过程。
SQL 或 NULL
复制 DELETE 语句。为 DELETE 语句提供所有主键列值。对删除复制以下命令:
DELETE FROM <table name> WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue
有关详细信息,请参阅指定如何传播事务性项目的更改。
[ @upd_cmd =] 'upd_cmd'
复制该项目的更新时所使用的复制命令类型。upd_cmd 的数据类型为 nvarchar(255),可以是下列值之一:值 说明 NONE
不执行任何操作。
CALL sp_MSupd_table
- 或 -
CALL custom_stored_procedure_name
在订阅服务器中调用要执行的存储过程。若要使用该复制方法,请使用 schema_option 来指定自动创建存储过程,或在项目的每个订阅服务器的目标数据库中创建指定的存储过程。
MCALL sp_MSupd_table
- 或 -
MCALL custom_stored_procedure_name
采用 MCALL 样式参数调用存储过程。若要使用该复制方法,请使用 schema_option 来指定自动创建存储过程,或在项目的每个订阅服务器的目标数据库中创建指定的存储过程。custom_stored_procedure 是用户创建的存储过程的名称。sp_MSupd_table 包含目标表的名称,用于代替参数的 _table 部分。如果指定了 destination_owner,则它将置于目标表名称之前。例如,对于订阅服务器中 Production 架构拥有的 ProductCategory 表,该参数应为
MCALL sp_MSupd_ProductionProductCategory
。对于对等复制拓扑中的项目,_table 后将追加 GUID 值。对于更新订阅服务器,不允许指定用户创建的存储过程。SCALL sp_MSupd_table(默认值)
- 或 -
SCALL custom_stored_procedure_name
采用 SCALL 样式参数调用存储过程。若要使用该复制方法,请使用 schema_option 来指定自动创建存储过程,或在项目的每个订阅服务器的目标数据库中创建指定的存储过程。custom_stored_procedure 是用户创建的存储过程的名称。sp_MSupd_table 包含目标表的名称,用于代替参数的 _table 部分。如果指定了 destination_owner,则它将置于目标表名称之前。例如,对于订阅服务器中 Production 架构拥有的 ProductCategory 表,该参数应为
SCALL sp_MSupd_ProductionProductCategory
。对于对等复制拓扑中的项目,_table 后将追加 GUID 值。对于更新订阅服务器,不允许指定用户创建的存储过程。XCALL sp_MSupd_table
-或-
XCALL custom_stored_procedure_name
采用 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、SCALL 和 XCALL 语法各不相同。CALL 语法传递所有已插入和已删除的列的所有值。SCALL 语法只传递受影响的列的值。XCALL 语法传递所有列的值(无论更改与否),包括列以前的值。有关详细信息,请参阅指定如何传播事务性项目的更改。
- [ @creation_script =] 'creation_script'
用于创建订阅数据库中项目的可选项目架构脚本的路径和名称。creation_script 的数据类型为 nvarchar(255),默认值为 NULL。
- [ @description =] 'description'
项目的说明项。description 的数据类型为 nvarchar(255),默认值为 NULL。
[ @pre_creation_cmd =] 'pre_creation_cmd'
指定在应用该项目的快照时,如果系统在订阅服务器中检测到同名的现有对象,则应该执行的操作。pre_creation_cmd 的数据类型为 nvarchar(10),可以是下列值之一:值 说明 none
不使用命令。
delete
在应用快照之前从目标表中删除数据。水平筛选项目时,将只删除筛选子句所指定的列中的数据。定义水平筛选时,不支持用于 Oracle 发布服务器。
drop(默认值)
删除目标表。
truncate
截断目标表。对 ODBC 或 OLE DB 订阅服务器无效。
- [ @filter_clause=] 'filter_clause'
是定义水平筛选器的限制 (WHERE) 子句。当输入限制子句时,将省略关键字 WHERE。filter_clause 的数据类型为 ntext,默认值为 NULL。有关详细信息,请参阅筛选已发布数据。
[ @schema_option =] schema_option
给定项目的架构生成选项的位掩码。schema_option 的数据类型为 binary(8),并且可以是具有下列一个或多个值的 | (Bitwise OR) 产品:注意: 如果该值为 NULL,则系统将为依赖于其他项目属性的项目自动生成有效的架构选项。“备注”中给出的“默认架构选项”表列出了基于项目类型和复制类型的组合所选择的值。 值
[ @destination_owner =] 'destination_owner'
目标对象的所有者的名称。destination_owner 的数据类型为 sysname,默认值为 NULL。如果未指定 destination_owner,则基于下列规则自动指定所有者:条件 目标对象所有者 发布使用本机模式的大容量复制来生成初始快照,该快照只支持 SQL Server 订阅服务器。
默认使用 source_owner 的值。
从非 SQL Server 发布服务器发布。
默认值为目标数据库的所有者。
发布使用字符模式的大容量复制来生成初始快照,该快照支持非 SQL Server 订阅服务器。
不分配。
若要支持非 SQL Server 订阅服务器,destination_owner 必须为 NULL。
[ @status=] status
指定项目是否是活动的,以及其他如何传播更改的选项。status 的数据类型为 tinyint,并且可以是具有下列一个或多个值的 | (Bitwise OR) 产品。值
- [ @source_owner =] 'source_owner'
源对象的所有者。source_owner 的数据类型为 sysname,默认值为 NULL。必须为 Oracle 发布服务器指定 source_owner。
- [ @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。有关可以使用快照或事务复制进行发布的对象的类型的详细信息,请参阅发布数据和数据库对象。
- [ @artid = ] article_ID OUTPUT
新项目的 ID。article_ID 的数据类型为 int,默认值为 NULL,它是 OUTPUT 参数。
[ @auto_identity_range = ] 'auto_identity_range'
启用和禁用在创建发布时对发布的自动标识范围处理。auto_identity_range 的数据类型为 nvarchar(5),可以是下列值之一:值 说明 true
启用自动标识范围处理
false
禁用自动标识范围处理
NULL(默认值)
标识范围处理由 identityrangemanagementoption 设置。
注意: 不推荐使用 auto_identity_range,提供此参数只是为了向后兼容。应使用 identityrangemanagementoption 来指定标识范围管理选项。有关详细信息,请参阅复制标识列。
- [ @pub_identity_range = ] pub_identity_range
如果将项目的 identityrangemanagementoption 设置为 auto 或将 auto_identity_range 设置为 true,则控制发布服务器中的范围大小。pub_identity_range 的数据类型为 bigint,默认值为 NULL。Oracle 发布服务器不支持。**
- [ @identity_range = ] identity_range
如果将项目的 identityrangemanagementoption 设置为 auto 或将 auto_identity_range 设置为 true,则控制订阅服务器中的范围大小。identity_range 的数据类型为 bigint,默认值为 NULL。当 auto_identity_range 设置为 true 时使用。Oracle 发布服务器不支持。**
- [ @threshold = ] threshold
百分比值,用于控制分发代理何时分配新标识范围。如果使用 threshold 中指定的百分比值,则分发代理将创建新的标识范围。threshold 的数据类型为 bigint,默认值为 NULL。当 identityrangemanagementoption 设置为 auto 或 auto_identity_range 设置为 true 时使用。Oracle 发布服务器不支持。**
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
确认此存储过程所执行的操作是否会使现有快照失效。force_invalidate_snapshot 的数据类型为 bit,默认值为 0。0 指定添加项目不会导致快照失效。如果存储过程检测到更改需要新的快照,则会发生错误并且不进行任何更改。
1 指定:添加项目可能导致快照无效,如果存在需要新快照的订阅,则为要标记为过时的现有快照和要生成的新快照进行授权。
[ @use_default_datatypes = ] use_default_datatypes
当从 Oracle 发布服务器发布项目时,是否使用默认的列数据类型映射。use_default_datatypes 的数据类型为 bit,默认值为 1。1 = 使用默认项目列映射。通过执行 sp_getdefaultdatatypemapping,可以显示默认数据类型映射。
0 = 定义了自定义项目列映射,因此 sp_addarticle 不调用 sp_articleview。
如果 use_default_datatypes 设置为 0,则必须对每个要从默认值更改为其他值的列映射执行一次 sp_changearticlecolumndatatype。已定义所有自定义列映射之后,必须执行 sp_articleview。
注意: 该参数只应当用于 Oracle 发布服务器。对于 SQL Server 发布服务器,如果将 use_default_datatypes 设置为 0,将生成错误。
[ @identityrangemanagementoption = ] identityrangemanagementoption
指定如何处理项目的标识范围管理。identityrangemanagementoption 的数据类型为 nvarchar(10),可以是下列值之一:值 说明 none
复制不会显式执行标识范围管理。仅当为了保持与 SQL Server 早期版本的向后兼容性时,才建议使用该选项。禁止用于对等复制。
manual
使用 NOT FOR REPLICATION 标记标识列,以启用手动标识范围处理。
auto
指定自动管理标识范围。
NULL(默认值)
如果 auto_identity_range 的值不是 true,则默认值为 none。在对等拓扑默认(忽略 auto_identity_range)中,默认值为 manual。
为了向后兼容,当 identityrangemanagementoption 值为 NULL 时,将检查 auto_identity_range 值。不过,在 identityrangemanagementoption 的值不为 NULL 时,则忽略 auto_identity_range 的值。**
有关详细信息,请参阅复制标识列。
[ @publisher = ] 'publisher'
指定一个非 SQL Server 发布服务器。publisher 的数据类型为 sysname,默认值为 NULL。注意: 向 SQL Server 发布服务器中添加项目时,不应使用 publisher。
- [ @fire_triggers_on_snapshot = ] 'fire_triggers_on_snapshot'
在应用初始快照时,是否执行所复制的用户触发器。fire_triggers_on_snapshot 的数据类型为 nvarchar(5),默认值为 FALSE。true 表示在应用快照时将执行复制的表中的用户触发器。为了复制触发器,schema_option 的位掩码值必须包括值 0x100。
返回代码值
0(成功)或 1(失败)
备注
sp_addarticle 用于快照复制或事务复制。
默认情况下,如果复制不支持列数据类型,则复制不发布源表中的任何列。如果需要发布这样的列,则必须执行 sp_articlecolumn 才能添加列。有关详细信息,请参阅所有类型复制的注意事项。
将项目添加到支持对等事务复制的发布中时,将应用下列限制:
- 必须为所有基于日志的项目指定参数化语句。必须在 status 值中包括 16。
- 目标表的名称和所有者必须与源表匹配。
- 不能水平或垂直筛选项目。
- 不支持自动标识范围管理。必须将 identityrangemanagementoption 的值指定为手动。
- 如果表中存在 timestamp 列,则必须在 schema_option 中包括 0x08,才能将列作为 timestamp 进行复制。
- 不能为 ins_cmd、upd_cmd 和 del_cmd 指定值 SQL。
有关详细信息,请参阅对等事务复制。
发布对象时,对象的定义会复制到订阅服务器。如果要发布的数据库对象依赖于一个或多个其他对象,则必须发布所有引用的对象。例如,如果要发布的视图依赖于一个表,则也必须发布该表。
如果 vertical_partition 设置为 true,则 sp_addarticle 将视图的创建推迟到调用 sp_articleview 时(添加最后一个 sp_articlecolumn 之后)。
如果发布允许更新订阅,并且已发布的表没有 uniqueidentifier 列,则 sp_addarticle 会自动将 uniqueidentifier 列添加到表中。
对于支持可转换订阅的项目,将忽略为 ins_cmd、del_cmd 和 upd_cmd 指定的值。
默认架构选项
该表说明了当用户未指定 schema_options 时复制所设置的默认值,这种情况下,该值取决于复制类型(沿顶部显示)和项目类型(显示在第一列中)。
项目类型 | 复制类型 | |
---|---|---|
|
事务性项目 |
Snapshot |
aggregate schema only |
0x01 |
0x01 |
func schema only |
0x01 |
0x01 |
indexed view schema only |
0x01 |
0x01 |
indexed view logbased |
0x30F3 |
0x3071 |
indexed view logbase manualboth |
0x30F3 |
0x3071 |
indexed view logbased manualfilter |
0x30F3 |
0x3071 |
indexed view logbased manualview |
0x30F3 |
0x3071 |
logbased |
0x30F3 |
0x3071 |
logbased manualfilter |
0x30F3 |
0x3071 |
logbased manualview |
0x30F3 |
0x3071 |
proc exec |
0x01 |
0x01 |
proc schema only |
0x01 |
0x01 |
serialized proc exec |
0x01 |
0x01 |
view schema only |
0x01 |
0x01 |
注意: |
---|
如果对排队更新启用发布,则将 schema_option 的值 0x80 添加到表中所显示的默认值中。对于非 SQL Server 发布,默认 schema_option 为 0x050D3。 |
有效架构选项
此表按复制类型(在顶部横向显示)和项目类型(在第一列纵向显示)说明了 schema_option 允许的值。
项目类型 | 复制类型 | |
---|---|---|
|
事务性项目 |
Snapshot |
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、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
serialized proc exec |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
proc schema only |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
view schema only |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000 和 0x80000000 |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000 和 0x80000000 |
func schema only |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
indexed view schema only |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000 和 0x80000000 |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000 和 0x80000000 |
注意: |
---|
对于排队更新发布,必须启用 schema_option 的值 0x8000 和 0x80。非 SQL Server 发布支持的 schema_option 值包括:0x01、0x02、0x10、0x40、0x80、0x1000、0x4000 和 0X8000。 |
权限
只有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员才能执行 sp_addarticle。
示例
DECLARE @publication AS sysname;
DECLARE @table AS sysname;
DECLARE @filterclause AS nvarchar(500);
DECLARE @filtername AS nvarchar(386);
DECLARE @schemaowner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @table = N'Product';
SET @filterclause = N'[DiscontinuedDate] IS NULL';
SET @filtername = N'filter_out_discontinued';
SET @schemaowner = N'Production';
-- Add a horizontally and vertically filtered article for the Product table.
-- Manually set @schema_option to ensure that the Production schema
-- is generated at the Subscriber (0x8000000).
EXEC sp_addarticle
@publication = @publication,
@article = @table,
@source_object = @table,
@source_owner = @schemaowner,
@schema_option = 0x80030F3,
@vertical_partition = N'true',
@type = N'logbased',
@filter_clause = @filterclause;
-- (Optional) Manually call the stored procedure to create the
-- horizontal filtering stored procedure. Since the type is
-- 'logbased', this stored procedures is executed automatically.
EXEC sp_articlefilter
@publication = @publication,
@article = @table,
@filter_clause = @filterclause,
@filter_name = @filtername;
-- Add all columns to the article.
EXEC sp_articlecolumn
@publication = @publication,
@article = @table;
-- Remove the DaysToManufacture column from the article
EXEC sp_articlecolumn
@publication = @publication,
@article = @table,
@column = N'DaysToManufacture',
@operation = N'drop';
-- (Optional) Manually call the stored procedure to create the
-- vertical filtering view. Since the type is 'logbased',
-- this stored procedures is executed automatically.
EXEC sp_articleview
@publication = @publication,
@article = @table,
@filter_clause = @filterclause;
GO
请参阅
参考
sp_articlecolumn (Transact-SQL)
sp_articlefilter (Transact-SQL)
sp_articleview (Transact-SQL)
sp_changearticle (Transact-SQL)
sp_droparticle (Transact-SQL)
sp_helparticle (Transact-SQL)
sp_helparticlecolumns (Transact-SQL)
复制存储过程 (Transact-SQL)
其他资源
How to: Define an Article (Replication Transact-SQL Programming)
发布数据和数据库对象
帮助和信息
更改历史记录
发布日期 | 历史记录 |
---|---|
2006 年 4 月 14 日 |
|
2005 年 12 月 5 日 |
|