sp_addarticle (Transact-SQL)
适用于: SQL Server Azure SQL 托管实例
创建项目并将其添加到发布中。 此存储过程在发布服务器上对发布数据库执行。
语法
sp_addarticle
[ @publication = ] N'publication'
, [ @article = ] N'article'
[ , [ @source_table = ] N'source_table' ]
[ , [ @destination_table = ] N'destination_table' ]
[ , [ @vertical_partition = ] N'vertical_partition' ]
[ , [ @type = ] N'type' ]
[ , [ @filter = ] N'filter' ]
[ , [ @sync_object = ] N'sync_object' ]
[ , [ @ins_cmd = ] N'ins_cmd' ]
[ , [ @del_cmd = ] N'del_cmd' ]
[ , [ @upd_cmd = ] N'upd_cmd' ]
[ , [ @creation_script = ] N'creation_script' ]
[ , [ @description = ] N'description' ]
[ , [ @pre_creation_cmd = ] N'pre_creation_cmd' ]
[ , [ @filter_clause = ] N'filter_clause' ]
[ , [ @schema_option = ] schema_option ]
[ , [ @destination_owner = ] N'destination_owner' ]
[ , [ @status = ] status ]
[ , [ @source_owner = ] N'source_owner' ]
[ , [ @sync_object_owner = ] N'sync_object_owner' ]
[ , [ @filter_owner = ] N'filter_owner' ]
[ , [ @source_object = ] N'source_object' ]
[ , [ @artid = ] artid OUTPUT ]
[ , [ @auto_identity_range = ] N'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 = ] N'identityrangemanagementoption' ]
[ , [ @publisher = ] N'publisher' ]
[ , [ @fire_triggers_on_snapshot = ] N'fire_triggers_on_snapshot' ]
[ ; ]
参数
[ @publication = ] N'publication'
包含项目的发布的名称。 名称在数据库中必须是唯一的。 @publication 为 sysname,无默认值。
[ @article = ] N'article'
项目的名称。 该名称在发布中必须唯一。 @article 为 sysname,无默认值。
[ @source_table = ] N'source_table'
此参数已弃用;请改用 @source_object 。 @source_table为 nvarchar(386),默认值为 NULL
. Oracle 发布服务器不支持@source_table 。
[ @destination_table = ] N'destination_table'
目标表(订阅)表的名称(如果不同于 @source_table 或存储过程)。 @destination_table为 sysname,默认值为 NULL
. 如果设置为 NULL
,则表示 @source_table 等于 @destination_table。
[ @vertical_partition = ] N'vertical_partition'
启用和禁用对表项目的列筛选。 @vertical_partition 为 nchar(5),默认值为 false
.
false
指示没有垂直筛选并发布所有列。true
清除声明的主键、无默认值的可为 null 列和唯一键列以外的所有列。 使用 sp_articlecolumn添加列。
[ @type = ] N'type'
项目的类型。 @type是 sysname,默认值NULL
为 ,可以是以下值之一。
值 | 说明 |
---|---|
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 exec 而不是 proc exec。 有关详细信息,请参阅发布事务复制中的存储过程执行中的“存储过程执行类型”部分。 在启用了变更数据捕获的情况下无法使用。 |
proc schema only |
仅具有架构的过程。 Oracle 发布服务器不支持。 |
serializable proc exec |
仅当存储过程在可序列化事务的上下文中执行时,才会复制存储过程的执行。 Oracle 发布服务器不支持。 该过程还必须在显式事务内执行,才能复制过程执行。 |
view schema only |
仅具有架构的视图。 Oracle 发布服务器不支持。 使用此选项时,还必须发布基表。 |
[ @filter = ] N'filter'
存储过程(使用 FOR REPLICATION 创建)用于水平筛选表。 @filter为 nvarchar(386),默认值为 NULL
. 必须手动运行 sp_articleview 并 sp_articlefilter 才能创建视图和筛选存储过程。 NULL
如果未创建,则不会创建筛选器过程(假定存储过程是手动创建的)。
[ @sync_object = ] N'sync_object'
用于生成用于表示本文快照的数据文件的表或视图的名称。 @sync_object为 nvarchar(386),默认值为 NULL
. 如果 NULL
调用 sp_articleview ,则会自动创建用于生成输出文件的视图。 添加具有 sp_articlecolumn的任何列后,会出现这种情况。 NULL
如果未创建,则不会创建视图(假定该视图是手动创建的)。
[ @ins_cmd = ] N'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时,该名称前面为目标表名称。 例如,对于 ProductCategory 订阅服务器上架构拥有的 Production 表,参数将是 CALL sp_MSins_ProductionProductCategory 。 对于对等复制拓扑中的文章, <table> 追加了 GUID 值。 更新 <custom_stored_procedure> 订阅者不支持指定。 |
SQL 或 NULL |
INSERT 复制语句。 该 INSERT 语句为文章中发布的所有列提供值。 对插入复制以下命令:INSERT INTO <table name> VALUES (c1value, c2value, c3value, ..., cnvalue) |
有关详细信息,请参阅 事务文章 - 指定如何传播更改。
[ @del_cmd = ] N'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时,该名称前面为目标表名称。 例如,对于 ProductCategory 订阅服务器上架构拥有的 Production 表,参数将是 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 = ] N'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时,该名称前面为目标表名称。 例如,对于 ProductCategory 订阅服务器上架构拥有的 Production 表,参数将是 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时,该名称前面为目标表名称。 例如,对于 ProductCategory 订阅服务器上架构拥有的 Production 表,参数将是 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 = ] N'creation_script'
用于在订阅数据库中创建项目的可选项目架构脚本的路径和名称。 @creation_script为 nvarchar(255),默认值为 NULL
.
[ @description = ] N'description'
文章的描述性条目。 @description 为 nvarchar(255),默认值为 NULL
.
[ @pre_creation_cmd = ] N'pre_creation_cmd'
指定在为本文应用快照时,如果系统在订阅服务器上检测到同名的现有对象,则应执行哪些操作。 @pre_creation_cmd 为 nvarchar(10),可以是以下值之一。
值 | 说明 |
---|---|
none |
不使用命令。 |
delete |
在应用快照之前从目标表中删除数据。 水平筛选项目时,将只删除筛选子句所指定的列中的数据。 定义水平筛选时,不支持用于 Oracle 发布服务器。 |
drop (默认值) |
删除目标表。 |
truncate |
截断目标表。 对 ODBC 或 OLE DB 订阅服务器无效。 |
[ @filter_clause = ] N'filter_clause'
定义水平筛选器的限制 (WHERE) 子句。 当输入限制子句时,将省略关键字 WHERE。 @filter_clause 为 nvarchar(max),默认值为 NULL
. 有关详细信息,请参阅筛选已发布数据。
[ @schema_option = ] schema_option
给定文章的架构生成选项的位掩码。 @schema_option为 varbinary(8),默认值NULL
为 ,可以是 |(按位或)其中一个或多个值的乘积:
注意
如果值为此值 NULL
,则系统会根据其他项目属性为项目自动生成有效的架构选项。 默认 架构选项 显示将基于项目类型和复制类型的组合选择的值。
值 | 说明 |
---|---|
0x00 |
禁用快照代理脚本并使用@creation_script。 |
0x01 |
生成对象创建脚本(CREATE TABLE、CREATE PROCEDURE 等)。 该值是存储过程项目的默认值。 |
0x02 |
如果已定义,则生成传播项目更改的存储过程。 |
0x04 |
使用 IDENTITY 属性为标识列编写脚本。 |
0x08 |
复制 时间戳 列。 如果未设置, 时间戳 列将作为 二进制复制。 |
0x10 |
生成对应的聚集索引。 即使未设置此选项,也生成与主键和唯一约束相关的索引(如果已在已发布的表上定义)。 |
0x20 1 |
在订阅服务器中将用户定义数据类型 (UDT) 转换为基本数据类型。 如果 UDT 列是主键的一部分,或者计算列引用 UDT 列,则不能使用此选项或 DEFAULT 约束。 |
0x40 |
生成相应的非聚集索引。 即使未设置此选项,也生成与主键和唯一约束相关的索引(如果已在已发布的表上定义)。 |
0x80 |
复制主键约束。 即使选项 0x10 未 0x40 启用,也复制与约束相关的任何索引。 |
0x100 1 |
如果已定义,则复制表项目的用户触发器。 |
0x200 1 |
复制外键约束。 如果引用的表不是发布的一部分,则不会复制已发布表上的所有外键约束。 |
0x400 1 |
复制检查约束。 |
0x800 1 |
复制默认值。 |
0x1000 |
复制列级排序规则。 注意: 应为 Oracle 发布服务器设置此选项以启用区分大小写的比较。 |
0x2000 1 |
复制与已发布项目源对象关联的扩展属性。 |
0x4000 |
复制 UNIQUE 约束。 即使选项 0x10 未 0x40 启用,也复制与约束相关的任何索引。 |
0x8000 |
此选项对 SQL Server 2005 (9.x) 发布服务器无效。 |
0x10000 |
将 CHECK 约束复制为 NOT FOR REPLICATION,以便在同步期间不强制实施约束。 |
0x20000 |
将 FOREIGN KEY 约束复制为 NOT FOR REPLICATION,以便在同步期间不强制实施约束。 |
0x40000 |
复制与已分区表或已分区索引相关联的文件组。 |
0x80000 |
复制已分区表的分区方案。 |
0x100000 |
复制已分区索引的分区方案。 |
0x200000 |
复制表统计信息。 |
0x400000 |
默认绑定。 |
0x800000 |
规则绑定。 |
0x1000000 |
全文索引。 |
0x2000000 |
不会复制绑定到 xml 列的 XML 架构集合。 |
0x4000000 |
复制 xml 列上的索引。 |
0x8000000 |
创建订阅服务器中尚不存在的任何架构。 |
0x10000000 |
将 xml 列转换为订阅服务器上的 ntext。 |
0x20000000 |
将 SQL Server 2005(9.x)中引入的大型对象数据类型(nvarchar(max)、 varchar(max)和 varbinary(max)转换为 SQL Server 2000(8.x)支持的数据类型。 |
0x40000000 |
复制权限。 |
0x80000000 |
尝试删除不属于发布的任何对象的依赖项。 |
0x100000000 |
如果对 varbinary(max) 列指定了 FILESTREAM 属性,请使用此选项复制 FILESTREAM 属性。 如果要将表复制到 SQL Server 2005 (9.x) 订阅服务器,请不要指定此选项。 不支持将具有 FILESTREAM 列的表复制到 SQL Server 2000 (8.x) 订阅服务器,而不考虑如何设置此架构选项。 请参阅相关选项 0x800000000。 |
0x200000000 |
将 SQL Server 2008(10.0.x)中引入的日期和时间数据类型(date、time、datetimeoffset 和 datetime2)转换为早期版本的 SQL Server 支持的数据类型。 |
0x400000000 |
复制数据和索引的压缩选项。 有关详细信息,请参阅数据压缩。 |
0x800000000 |
设置此选项可将 FILESTREAM 数据存储到订阅服务器上其自身的文件组中。 如果未设置此选项,则 FILESTREAM 数据存储在默认文件组中。 复制不创建文件组;因此,如果设置此选项,则必须在订阅服务器上应用快照之前创建文件组。 有关如何在应用快照之前创建对象的详细信息,请参阅 “应用快照之前和之后执行脚本”。 请参阅相关选项 0x100000000。 |
0x1000000000 |
将大于 8000 字节的公共语言运行时(CLR)用户定义类型(UDT)转换为 varbinary(max), 以便可以将 UDT 类型的列复制到运行 SQL Server 2005 (9.x) 的订阅服务器。 |
0x2000000000 |
将 hierarchyid 数据类型转换为 varbinary(max), 以便可以将类型 hierarchyid 的列复制到运行 SQL Server 2005 (9.x) 的订阅服务器。 有关如何在复制表中使用 hierarchyid 列的详细信息,请参阅 hierarchyid。 |
0x4000000000 |
复制表的任何筛选的索引。 有关筛选索引的详细信息,请参阅创建筛选索引。 |
0x8000000000 |
将 地理 和 几何 数据类型转换为 varbinary(max), 以便可以将这些类型的列复制到运行 SQL Server 2005 (9.x) 的订阅服务器。 |
0x10000000000 |
复制地理和几何图形列的索引。 |
0x20000000000 |
复制列的 SPARSE 属性。 有关此属性的详细信息,请参阅 “使用稀疏列”。 |
0x40000000000 |
通过快照代理启用脚本以在订阅服务器上创建内存优化表。 |
0x80000000000 |
将聚集索引转换为内存优化项目的非聚集索引。 |
0x400000000000 |
复制表上任何非聚集列存储索引 |
0x800000000000 |
复制表上任何筛选的非聚集列存储索引。 |
NULL |
复制会自动 将@schema_option 设置为默认值,该值取决于其他项目属性。 “备注”部分的“默认架构选项”表根据项目类型和复制类型列出了默认架构选项。 非 SQL Server 发布的默认值为 0x050D3 。 |
1 Oracle 发布服务器不支持。
并非所有 @schema_option 值对每种类型的复制和项目类型都有效。 “ 备注”部分中的“有效架构选项 ”表显示可以根据项目类型和复制类型的组合选择的有效架构选项。
[ @destination_owner = ] N'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,可以是 |(按位或)其中一个或多个值的乘积。
值 | 说明 |
---|---|
1 |
项目是活动的。 |
8 |
在语句中包含 INSERT 列名。 |
16 (默认值) |
使用参数化语句。 |
24 |
在语句中包含 INSERT 列名并使用参数化语句。 |
64 |
标识为仅供参考。 不支持。 不保证以后的兼容性。 |
例如,使用参数化语句的活动文章将在此列中具有值 17
。 0
值表示项目处于非活动状态,且未定义其他属性。
[ @source_owner = ] N'source_owner'
源对象的所有者。 @source_owner为 sysname,默认值为 NULL
. 必须为 Oracle 发布服务器指定@source_owner。
[ @sync_object_owner = ] N'sync_object_owner'
定义已发布项目的视图的所有者。 @sync_object_owner为 sysname,默认值为 NULL
.
[ @filter_owner = ] N'filter_owner'
筛选器的所有者。 @filter_owner为 sysname,默认值为 NULL
.
[ @source_object = ] N'source_object'
要发布的数据库对象。 @source_object为 sysname,默认值为 NULL
. 如果@source_table,NULL
则@source_object不能NULL
。 应使用@source_object而不是@source_table。 有关可以使用快照或事务复制发布的对象类型的详细信息,请参阅 发布数据和数据库对象。
[ @artid = ] artid OUTPUT
新文章的文章 ID。 @artid是 int 类型的 OUTPUT 参数。
[ @auto_identity_range = ] N'auto_identity_range'
启用和禁用在创建发布时对发布的自动标识范围处理。 @auto_identity_range 为 nvarchar(5),可以是以下值之一:
值 | 说明 |
---|---|
true |
启用自动标识范围处理 |
false |
禁用自动标识范围处理 |
NULL (默认值) |
标识范围处理由 @identityrangemanagementoption设置。 |
注意
@auto_identity_range已弃用,仅用于向后兼容。 应使用 @identityrangemanagementoption 来指定标识范围管理选项。 有关详细信息,请参阅复制标识列。
[ @pub_identity_range = ] pub_identity_range
如果项目@identityrangemanagementoption设置为“自动”或“@auto_identity_range设置为 true,则控制发布服务器上的范围大小。 @pub_identity_range为 bigint,默认值为 NULL
. Oracle 发布服务器不支持@pub_identity_range 。
[ @identity_range = ] identity_range
如果项目@identityrangemanagementoption设置为“自动”或“@auto_identity_range设置为 true”,则控制订阅服务器上的范围大小。 @identity_range为 bigint,默认值为 NULL
. 当@auto_identity_range设置为 true 时使用。 Oracle 发布服务器不支持@identity_range。
[ @threshold = ] 阈值
用于控制分发代理何时分配新标识范围的百分比值。 使用@threshold中指定的值的百分比时,分发代理会创建新的标识范围。 @threshold为 int,默认值为 NULL
. 当@identityrangemanagementoption设置为自动或@auto_identity_range设置为 true 时使用。 Oracle 发布服务器不支持@threshold 。
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
确认此存储过程执行的操作可能会使现有快照失效。 @force_invalidate_snapshot为位,默认值为 0
.
0
指定添加项目不会导致快照无效。 如果存储过程检测到更改需要新的快照,则会发生错误并且不进行任何更改。1
指定添加项目可能会导致快照无效,并且如果存在需要新快照的订阅,则授予将现有快照标记为已过时和要生成的新快照的权限。
[ @use_default_datatypes = ] use_default_datatypes
是否在从 Oracle 发布服务器发布项目时使用默认列数据类型映射。 @use_default_datatypes为位,默认值为 1
.
1
= 使用默认项目列映射。 可以通过执行 sp_getdefaultdatatypemapping来显示默认数据类型映射。0
= 定义了自定义项目列映射,因此 sp_articleview 不是由调用的sp_addarticle
。
如果 @use_default_datatypes 设置为 0
,则必须对从默认值更改的每个列映射执行 一次sp_changearticlecolumndatatype 。 定义所有自定义列映射后,必须执行 sp_articleview。
注意
该参数只应当用于 Oracle 发布服务器。 将 @use_default_datatypes 设置为 0
SQL Server 发布服务器将生成错误。
[ @identityrangemanagementoption = ] N'identityrangemanagementoption'
指定如何处理项目的标识范围管理。 @identityrangemanagementoption 为 nvarchar(10),可以是以下值之一。
值 | 说明 |
---|---|
none |
复制不会显式执行标识范围管理。 仅建议使用此选项来向后兼容早期版本的 SQL Server。 禁止用于对等复制。 |
manual |
使用 NOT FOR REPLICATION 标记标识列,以启用手动标识范围处理。 |
auto |
指定自动管理标识范围。 |
NULL (默认值) |
none 默认值为@auto_identity_range的值不是 true 。 默认为 manual 对等拓扑默认值(忽略@auto_identity_range )。 |
为了向后兼容,当@identityrangemanagementoption的值为NULL
时,将检查@auto_identity_range的值。 但是,如果@identityrangemanagementoption的值不是NULL
,则忽略@auto_identity_range的值。
有关详细信息,请参阅复制标识列。
[ @publisher = ] N'publisher'
指定非 SQL Server 发布服务器。 @publisher为 sysname,默认值为 NULL
.
将项目添加到 SQL Server 发布服务器时,不应使用@publisher 。
[ @fire_triggers_on_snapshot = ] N'fire_triggers_on_snapshot'
如果在应用初始快照时执行复制的用户触发器。 @fire_triggers_on_snapshot为 nvarchar(5),默认值为 false
. true
表示应用快照时,将执行复制表上的用户触发器。 若要复制触发器,@schema_option的位掩码值必须包含该值0x100
。
返回代码值
0
(成功)或 1
(失败)。
注解
sp_addarticle
用于快照复制或事务复制。
默认情况下,复制在复制不支持列数据类型时,不会发布源表中的任何列。 如果需要发布此类列,则必须执行 sp_articlecolumn 添加列。
将项目添加到支持对等事务复制的发布中时,将应用下列限制:
必须为所有基于日志的项目指定参数化语句。 必须包含在
16
@status值中。目标表的名称和所有者必须与源表匹配。
无法水平或垂直筛选文章。
不支持自动标识范围管理。 必须为@identityrangemanagementoption指定手动值。
如果表中存在时间戳列,则必须在@schema_option中包含0x08才能将列复制为时间戳。
不能为@ins_cmd、@upd_cmd和@del_cmd指定值
SQL
。
有关详细信息,请参阅 对等 - 事务复制。
发布对象时,对象的定义会复制到订阅服务器。 如果要发布依赖于一个或多个其他对象的数据库对象,则必须发布所有引用的对象。 例如,如果要发布的视图依赖于一个表,则也必须发布该表。
如果@vertical_partition设置为 true,则延迟创建视图,直到调用sp_articleview(添加最后一个sp_articlecolumn之后)。 sp_addarticle
如果发布允许更新订阅,并且已发布的表没有 uniqueidentifier 列,则 sp_addarticle
会自动向表添加 uniqueidentifier 列。
复制到不是 SQL Server 实例(异类复制)的订阅服务器时,仅支持 INSERT
UPDATE
Transact-SQL 语句和DELETE
命令。
运行日志读取器代理时,将项目添加到对等发布可能导致日志读取器代理和添加该项目的进程之间的死锁。 若要避免此问题,在将项目添加到对等发布之前,请使用复制监视器在要添加文章的节点上停止日志读取器代理。 在添加项目后,重新启动日志读取器代理。
将@del_cmd设置为NONE
或@ins_cmdNONE
时,命令的UPDATE
传播也可能受到在发生绑定更新时不发送这些命令的影响。 (有限更新是发布服务器中作为DELETE
/INSERT
对复制的语句的类型。UPDATE
默认架构选项
下表描述了由复制设置的默认值(如果用户 未指定@schema_options ),其中此值取决于复制类型(显示在顶部)和项目类型(显示在第一列)。
文章类型 | 事务复制 | 快照复制 |
---|---|---|
仅聚合架构 | 0x01 |
0x01 |
仅限 func 架构 | 0x01 |
0x01 |
仅限索引视图架构 | 0x01 |
0x01 |
已编制索引的视图日志 | 0x30F3 |
0x3071 |
索引视图 logbase manualboth | 0x30F3 |
0x3071 |
索引视图 logbased manualfilter | 0x30F3 |
0x3071 |
索引视图 logbased manualview | 0x30F3 |
0x3071 |
logbased | 0x30F3 |
0x3071 |
logbased manualfilter | 0x30F3 |
0x3071 |
logbased manualview | 0x30F3 |
0x3071 |
proc exec | 0x01 |
0x01 |
仅限 proc 架构 | 0x01 |
0x01 |
serializable proc exec | 0x01 |
0x01 |
仅查看架构 | 0x01 |
0x01 |
注意
如果为发布启用了排队更新, 则会将@schema_option 值 0x80
添加到表中所示的默认值。 非 SQL Server 发布的默认 @schema_option 为 0x050D3
。
有效的架构选项
下表根据复制类型(显示在顶部)和项目类型(如第一列所示)描述@schema_option的允许值。
文章类型 | 事务复制 | 快照复制 |
---|---|---|
logbased | 以上所有选项 | 所有选项,但 0x02 |
logbased manualfilter | 以上所有选项 | 所有选项,但 0x02 |
logbased manualview | 以上所有选项 | 所有选项,但 0x02 |
已编制索引的视图日志 | 以上所有选项 | 所有选项,但 0x02 |
索引视图 logbased manualfilter | 以上所有选项 | 所有选项,但 0x02 |
索引视图 logbased manualview | 以上所有选项 | 所有选项,但 0x02 |
索引视图 logbase manualboth | 以上所有选项 | 所有选项,但 0x02 |
proc exec | 0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
serializable proc exec | 0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
仅限 proc 架构 | 0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
仅查看架构 | 0x01 、0x010 、、0x040 0x020 、、 0x2000 0x0100 0x40000000 0x8000000 0x800000 0x200000 0x2000000 0x40000 0x100000 0x400000 和0x80000000 |
0x01 、0x010 、、0x040 0x020 、、 0x2000 0x0100 0x40000000 0x8000000 0x800000 0x200000 0x2000000 0x40000 0x100000 0x400000 和0x80000000 |
仅限 func 架构 | 0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
仅限索引视图架构 | 0x01 、0x010 、、0x040 0x020 、、 0x2000 0x0100 0x40000000 0x8000000 0x800000 0x200000 0x2000000 0x40000 0x100000 0x400000 和0x80000000 |
0x01 、0x010 、、0x040 0x020 、、 0x2000 0x0100 0x40000000 0x8000000 0x800000 0x200000 0x2000000 0x40000 0x100000 0x400000 和0x80000000 |
注意
对于排队更新发布,必须启用其@schema_option值0x8000
0x80
。 非 SQL Server 发布的支持的@schema_option值包括:0x01
、、、0x02
0x10
0x40
、、0x80
、 0x1000
0x4000
和0X8000
。
示例
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
权限
只有 sysadmin 固定服务器角色的成员或db_owner固定数据库角色的成员才能执行sp_addarticle
。