sp_addarticle

来源:互联网 发布:坚定的裁决魔兽数据库 编辑:程序博客网 时间:2024/06/06 10:35

sp_addarticle (Transact-SQL)

            SQL Server 2012
其他版本               
  • SQL Server 2008 R2
  • SQL Server 2008
  • SQL Server 2005
此主题尚未评级- 评价此主题

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

主题链接图标Transact-SQL 语法约定

语法

复制
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_objectfilter 参数。对于此类型的项目,不需要单独发布基表。Oracle 发布服务器不支持。

indexed view logbased manualfilter

具有手动筛选器并且基于日志的索引视图项目。该选项需要指定sync_objectfilter 参数。对于此类型的项目,不需要单独发布基表。Oracle 发布服务器不支持。

indexed view logbased manualview

具有手动视图并且基于日志的索引视图项目。该选项需要指定sync_object 参数。对于此类型的项目,不需要单独发布基表。Oracle 发布服务器不支持。

indexed view schema only

仅具有架构的索引视图。对于此类型的项目,还必须发布基表。

logbased(默认值)

基于日志的项目。

logbased manualboth

具有手动筛选器和手动视图并且基于日志的项目。该选项需要指定sync_objectfilter 参数。Oracle 发布服务器不支持。

logbased manualfilter

具有手动筛选器并且基于日志的项目。该选项需要指定sync_objectfilter 参数。Oracle 发布服务器不支持。

logbased manualview

具有手动视图并且基于日志的项目。该选项需要指定sync_object 参数。Oracle 发布服务器不支持。

proc exec

将存储过程的执行复制到项目的所有订阅服务器。Oracle 发布服务器不支持。建议您使用选项“serializable proc exec”,而不是proc exec有关详细信息,请参阅在事务复制中发布存储过程执行中的“存储过程执行项目的类型”。

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

不使用命令。

删除

在应用快照之前从目标表中删除数据。水平筛选项目时,将只删除筛选子句所指定的列中的数据。定义水平筛选时,不支持用于 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,则系统将为依赖于其他项目属性的项目自动生成有效的架构选项。“备注”中给出的“默认架构选项”表列出了基于项目类型和复制类型的组合所选择的值。

说明

0x00

禁用快照代理编写脚本功能并使用 creation_script

0x01

生成对象创建脚本(CREATE TABLE、CREATE PROCEDURE 等)。该值是存储过程项目的默认值。

0x02

如果已定义,则生成传播项目更改的存储过程。

0x04

使用 IDENTITY 属性为标识列编写脚本。

0x08

复制 timestamp 列。如果不设置,则timestamp 列将作为 binary 进行复制。

0x10

生成对应的聚集索引。即使不设置此选项,但如果已在已发布的表中定义与主键相关的索引以及唯一约束,那么也会生成它们。

0x20

在订阅服务器中将用户定义数据类型 (UDT) 转换为基本数据类型。如果 UDT 列是主键的一部分或者计算列引用 UDT 列,则当 UDT 列上具有 CHECK 或 DEFAULT 约束时,此选项无法使用。Oracle 发布服务器不支持

0x40

生成相应的非聚集索引。即使不设置此选项,但如果已在已发布的表中定义与主键相关的索引以及唯一约束,那么也会生成它们。

0x80

复制主键约束。即使不启用选项0x100x40,仍将复制与约束相关的任何索引。

0x100

如果已定义,则复制表项目的用户触发器。Oracle 发布服务器不支持

0x200

复制外键约束。如果所引用的表不是发布的一部分,则不会复制已发布表的任何 FOREIGN KEY 约束。Oracle 发布服务器不支持

0x400

复制检查约束。Oracle 发布服务器不支持

0x800

复制默认值。Oracle 发布服务器不支持

0x1000

复制列级排序规则。

注意注意
应当为 Oracle 发布服务器设置该选项,以启用区分大小写的比较。

0x2000

复制与已发布项目源对象关联的扩展属性。Oracle 发布服务器不支持

0x4000

复制 UNIQUE 约束。即使不启用选项0x100x40,仍将复制与约束相关的任何索引。

0x8000

此选项对 SQL Server 2005 发布服务器无效。

0x10000

以 NOT FOR REPLICATION 方式复制 CHECK 约束,以便在同步期间不强制执行约束。

0x20000

以 NOT FOR REPLICATION 方式复制 FOREIGN KEY 约束,以便在同步期间不强制执行约束。

0x40000

复制与已分区表或已分区索引相关联的文件组。

0x80000

复制已分区表的分区方案。

0x100000

复制已分区索引的分区方案。

0x200000

复制表统计信息。

0x400000

默认值绑定

0x800000

规则绑定

0x1000000

全文索引

0x2000000

不复制绑定到 xml 列的 XML 架构集合。

0x4000000

复制 xml 列的索引。

0x8000000

创建订阅服务器中尚不存在的任何架构。

0x10000000

在订阅服务器上将 xml 列转换成ntext

0x20000000

将 SQL Server 2005 中引入的大型对象数据类型(nvarchar(max)varchar(max)varbinary(max))转换为 SQL Server 2000 支持的数据类型。

0x40000000

复制权限。

0x80000000

尝试删除不属于发布一部分的任何对象的依赖项。

0x100000000

如果对 varbinary(max) 列指定了 FILESTREAM 属性,则使用此选项可复制此属性。如果要将表复制到 SQL Server 2005 订阅服务器,请勿指定此选项。不论此架构选项的设置如何,均不支持将包含 FILESTREAM 列的表复制到 SQL Server 2000 订阅服务器。

请参阅相关选项 0x800000000

0x200000000

将 SQL Server 2008 中引入的日期和时间数据类型(datetimedatetimeoffsetdatetime2)转换为 SQL Server 早期版本支持的数据类型。

0x400000000

复制数据和索引的压缩选项。有关详细信息,请参阅数据压缩

0x800000000

设置此选项可将 FILESTREAM 数据存储到订阅服务器上其自身的文件组中。如果不设置此选项,FILESTREAM 数据将存储在默认文件组中。由于复制操作不创建文件组,因此如果您设置此选项,您必须先创建文件组,然后在订阅服务器上应用快照。有关如何在应用快照前创建对象的详细信息,请参阅在应用快照之前和之后执行脚本

请参阅相关选项 0x100000000

0x1000000000

将公共语言运行时 (CLR) 中大于 8000 字节的用户定义类型 (UDT) 转换为 varbinary(max),以使类型为 UDT 的列能够复制到运行 SQL Server 2005 的订阅服务器。

0x2000000000

hierarchyid 数据类型转换为varbinary(max),以使类型为 hierarchyid 的列能够复制到运行 SQL Server 2005 的订阅服务器。有关如何在复制的表中使用hierarchyid 列的详细信息,请参阅 hierarchyid (Transact-SQL)

0x4000000000

复制表的任何筛选的索引。有关筛选的索引的详细信息,请参阅创建筛选索引

0x8000000000

geographygeometry 数据类型转换为 varbinary(max),以使这些类型的列能够复制到运行 SQL Server 2005 的订阅服务器。

0x10000000000

复制类型为 geographygeometry 的列的索引。

0x20000000000

复制列的 SPARSE 属性。有关该属性的详细信息,请参阅使用稀疏列

NULL

复制过程会自动将 schema_option 设置为默认值,其值依赖于其他项目属性。“备注”部分的“默认架构选项”表根据项目类型和复制类型列出了默认架构选项。

非 SQL Server 发布的默认值是 0x050D3

并非所有 schema_option 值对每个复制类型和项目类型都有效。“备注”中给出的“有效架构选项”表列出了基于项目类型和复制类型的组合所选择的有效架构选项。

[ @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) 产品。

说明

1

项目是活动的。

8

在 INSERT 语句中包含列名。

16(默认值)

使用参数化语句。

24

在 INSERT 语句中包含列名,并使用参数化语句。

64

标识为仅供参考。不提供支持。不保证以后的兼容性。

例如,对于使用参数化语句的活动项目,此列中的值为 17。如果值为0,则表示项目处于非活动状态,而且未定义其他属性。

[ @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 设置为 autoauto_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_cmdupd_cmddel_cmd 指定值 SQL

有关详细信息,请参阅对等事务复制

发布对象时,对象的定义会复制到订阅服务器。如果要发布的数据库对象依赖于一个或多个其他对象,则必须发布所有被引用对象。例如,如果要发布的视图依赖于一个表,则也必须发布该表。

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

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

复制到不是 SQL Server 实例的订阅服务器(异类复制)时,仅对于 INSERTUPDATEDELETE 命令支持 Transact-SQL 语句。

运行日志读取器代理时,将项目添加到对等发布可能导致日志读取器代理和添加该项目的进程之间的死锁。为了避免此问题,在将项目添加到对等发布前,请使用复制监视器停止正在添加项目的节点上的日志读取器代理。在添加项目后,重新启动日志读取器代理。

默认架构选项

该表说明了当用户未指定 schema_options 时复制所设置的默认值,这种情况下,该值取决于复制类型(沿顶部显示)和项目类型(显示在第一列中)。

项目类型

复制类型

事务性

快照

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

serializable proc exec

0x01

0x01

view schema only

0x01

0x01

注意注意

如果对排队更新启用发布,则将 schema_option 的值0x80 添加到表中所显示的默认值中。对于非 SQL Server 发布,默认schema_option0x050D3

有效架构选项

此表按复制类型(在顶部横向显示)和项目类型(在第一列纵向显示)说明了 schema_option 允许的值。

项目类型

复制类型

事务

快照

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

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

serializable proc exec

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

proc schema only

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

view schema only

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x400000000x80000000

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x400000000x80000000

func schema only

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

indexed view schema only

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x400000000x80000000

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x400000000x80000000

注意注意

对于排队更新发布,必须启用 schema_option 的值0x80000x80非 SQL Server 发布支持的schema_option 值包括:0x010x020x100x400x800x10000x40000X8000

示例

TSQL
复制
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 articleEXEC 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

原创粉丝点击