sp_addarticle
Creates an article and adds it to a publication. This stored procedure is executed at the Publisher on the publication database.
Syntax
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 ]
Arguments
[@publication = ] 'publication'
Is the name of the publication that contains the article. The name must be unique in the database. publication is sysname, with no default.
[@article = ] 'article'
Is the name of the article. The name must be unique within the publication. article is sysname, with no default.
[@source_table = ] 'source_table'
Is the name of the underlying table represented by the article or stored procedure. source_table is nvarchar(386), which must be on the local SQL Server computer, conform to the rules for identifiers, and be a table (not a view or another database object). source_table is supported for backward compatibility only; use source_object instead.
[@destination_table = ] 'destination_table'
Is the name of the destination (subscription) table, if different from source_table or the stored procedure. destination_table is sysname, with a default of NULL, which means that source_table equals destination_table.
[@vertical_partition = ] 'vertical_partition'
Enables and disables column filtering on a table article. vertical_partition is nchar(5), with a default of FALSE. false indicates there is no vertical filtering and publishes all columns. true clears all columns except the declared primary key. Columns are added using sp_articlecolumn.
[@type = ] 'type'
Is the type of article. type is sysname, and can be one of these values.
Value | Description |
---|---|
logbased | Log-based article. |
logbased manualfilter | Log-based article with manual filter. |
logbased manualview | Log-based article with manual view. |
logbased manualboth | Log-based article with manual filter and manual view. |
proc exec | Replicates the execution of the stored procedure to all Subscribers of the article. |
serializable proc exec | Replicates the execution of the stored procedure only if it is executed within the context of a serializable transaction. |
NULL (default) |
[@filter = ] 'filter'
Is the stored procedure (created with FOR REPLICATION) used to filter the table horizontally. filter is nvarchar(386), with a default of NULL. sp_articleview and sp_articlefilter must be executed manually to create the view and filter stored procedure. If not NULL, the filter procedure is not created (assumes the stored procedure is created manually).
[@sync_object = ] 'sync_object'
Is the name of the table or view used for producing the data file used to represent the snapshot for this article. sync_object is nvarchar(386), with a default of NULL. If NULL, sp_articleview is called to automatically create the view used to generate the output file. This occurs after adding any columns with sp_articlecolumn. If not NULL, a view is not created (assumes the view is manually created).
[@ins_cmd = ] 'ins_cmd'
Is the replication command type used when replicating inserts for this article. ins_cmd is nvarchar(255), and can be one of these values.
Value | Description |
---|---|
NONE | No action is taken. |
CALL sp_MSins_article
-or- CALL custom_stored_procedure_name (default) |
Calls a stored procedure to be executed at the Subscriber. To use this method of replication, use @schema_option to specify automatic creation of the stored procedure, or create the specified stored procedure in the destination database of each Subscriber of the article. custom_stored_procedure is the name of a user-created stored procedure. sp_Msins_article contains the name of the article in place of the _article part of the parameter. For example, for the Categories table, the parameter would be CALL sp_Msins_Categories. |
SQL or NULL | Replicates an INSERT statement. The INSERT statement is provided values for all columns published in the article. This command is replicated on inserts:
|
[@del_cmd = ] 'del_cmd'
Is the replication command type used when replicating deletes for this article. del_cmd is nvarchar(255), and can be one of these values.
Value | Description |
---|---|
NONE | No action is taken. |
CALL sp_MSdel_article -or-
CALL custom_stored_procedure_name (default) |
Calls a stored procedure to be executed at the Subscriber. To use this method of replication, use @schema_option to specify automatic creation of the stored procedure, or create the specified stored procedure in the destination database of each Subscriber of the article. custom_stored_procedure is the name of a user-created stored procedure. sp_Msins_article contains the name of the article in place of the _article part of the parameter. For example, for the Categories table, the parameter would be CALL sp_Msins_Categories. |
XCALL sp_MSdel_article | Calls a stored procedure taking XCALL style parameters. To use this method of replication, use @schema_option to specify automatic creation of the stored procedure, or create the specified stored procedure in the destination database of each Subscriber of the article. |
SQL or NULL | Replicates a DELETE statement. The DELETE statement is provided all primary key column values. This command is replicated on deletes:
|
Note The CALL, MCALL, and XCALL syntax vary the amount of data propagated to the subscriber. The CALL syntax passes all values for all inserted and deleted columns. The MCALL syntax passes values only for affected columns. The XCALL syntax passes values for all columns, whether changed or not, plus the "before" value of the column. For more information, see Using Custom Stored Procedures in Articles.
[@upd_cmd = ] 'upd_cmd'
Is the replication command type used when replicating updates for this article. upd_cmd is nvarchar(255), and can be one of these values.
Value | Description |
---|---|
NONE | No action is taken. |
CALL sp_MSupd_article | Calls a stored procedure to be executed at the Subscriber. To use this method of replication, use @schema_option to specify automatic creation of the stored procedure, or create the specified stored procedure in the destination database of each Subscriber of the article. |
MCALL sp_MSupd_article (default) | Calls a stored procedure taking MCALL style parameters. To use this method of replication, use @schema_option to specify automatic creation of the stored procedure, or create the specified stored procedure in the destination database of each Subscriber of the article. custom_stored_procedure is the name of a user-created stored procedure. sp_Msins_article contains the name of the article in place of the _article part of the parameter. For example, for the Categories table, the parameter would be CALL sp_Msins_Categories. |
XCALL sp_MSupd_article | Calls a stored procedure taking XCALL style parameters. To use this method of replication, use @schema_option to specify automatic creation of the stored procedure, or create the specified stored procedure in the destination database of each Subscriber of the article. |
SQL or NULL | Replicates an UPDATE statement. The UPDATE statement is provided on all column values and the primary key column values. This command is replicated on updates:
|
Note The CALL, MCALL, and XCALL syntax vary the amount of data propagated to the subscriber. The CALL syntax passes all values for all inserted and deleted columns. The MCALL syntax passes values only for affected columns. The XCALL syntax passes values for all columns, whether changed or not, including the previous value of the column. For more information, see Using Custom Stored Procedures in Articles.
[@creation_script = ] 'creation_script'
Is the path and name of an article schema script used to create target table. creation_script is nvarchar(127), with a default of NULL.
[@description = ] 'description'
Is a descriptive entry for the article. description is nvarchar(255), with a default of NULL.
[@pre_creation_cmd = ] 'pre_creation_cmd'
Specifies what the system should do if it detects an existing object of the same name at the subscriber when applying the snapshot for this article. pre_creation_cmd is nvarchar(10), and can be one of these values.
Value | Description |
---|---|
none | Does not use a command. |
delete | Deletes the destination table. |
drop (default) | Drops the destination table. |
truncate | Truncates the destination table. Is not valid for ODBC or OLE DB Subscribers. |
[@filter_clause = ] 'filter_clause'
Is a restriction (WHERE) clause that defines a horizontal filter. When entering the restriction clause, omit the keyword WHERE. filter_clause is ntext, with a default of NULL. For more information, see Generate Filters Automatically.
[@schema_option = ] schema_option
Is a bitmask of the schema generation option for the given article. It specifies the automatic creation of the stored procedure in the destination database for all CALL/MCALL/XCALL. schema_option is binary(8), and can be a combination of these values. If this value is NULL, the system will auto-generate a valid schema option for the article. The table given in the Remarks shows the value that will be chosen based upon the combination of the article type and the replication type.
Value | Description |
---|---|
0x00 | Disables scripting by the Snapshot Agent and uses creation_script. |
0x01 | Generates the object creation (CREATE TABLE, CREATE PROCEDURE, and so on). This value is the default for stored procedure articles. |
0x02 | Generates custom stored procedures for the article, if defined. |
0x10 | Generates a corresponding clustered index. |
0x20 | Converts user-defined data types to base data types. |
0x40 | Generates corresponding nonclustered index(es). |
0x80 | Includes declared referential integrity on the primary keys. |
0x100 | Replicates user triggers on a table article, if defined. |
0x200 | Replicates foreign key constraints. If the referenced table is not part of a publication, all foreign key constraints on a published table will not be replicated. |
0x400 | Replicates check constraints. |
0x800 | Replicates defaults. |
0x1000 | Replicates column-level collation. |
0x2000 | Replicates extended properties associated with the published article source object. |
0x4000 | Replicates unique keys if defined on a table article. |
0x8000 | Replicates primary key and unique keys on a table article as constraints using ALTER TABLE statements. |
NULL |
Not all @schema_option values are valid for every type of replication and article type. The Valid Schema Option table given in the Remarks shows the valid schema options that can be chosen based upon the combination of the article type and the replication type.
[@destination_owner = ] 'destination_owner'
Is the name of the owner of the destination object. destination_owner is sysname, with a default of NULL. If ODBC Subscribers can subscribe to the publication, destination_owner must be NULL.
[@status = ] status
Is the bitmask of the article options. status is tinyint, and can be one of these values.
Value | Description |
---|---|
0 | No additional properties. |
8 | Includes the column name in INSERT statements. |
16 (default) | Uses parameterized statements. |
24 | Includes the column name in INSERT statements and uses parameterized statements. |
[@source_owner = ] 'source_owner'
Is the owner of the source object. source_owner is sysname, with a default of NULL.
[@sync_object_owner = ] 'sync_object_owner'
Is the owner of the synchronization object. sync_object_owner is sysname, with a default of NULL.
[@filter_owner = ] 'filter_owner'
Is the owner of the filter. filter_owner is sysname, with a default of NULL.
[@source_object = ] 'source_object'
Is the table or stored procedure to be published. source_object is sysname, with a default of NULL. If source_table is NULL, source_object cannot be NULL. source_object should be used instead of source_table. source_table is provided for backward compatibility with SQL Server 6.x Publishers.
[@artid = ] article_ID OUTPUT
Is the article ID of the new article. article_ID is int with a default of NULL, and it is an OUTPUT parameter.
[@auto_identity_range = ] 'auto_identity_range'
Enables and disables automatic identity range handling on a publication at the time it is created. auto_identity_range is nvarchar(5), with a default of FALSE. true enables automatic identity range handling; false disables it. Note that identity range management only pertains to snapshot or transactional publications that allow immediate updating or queued updating. For more information, see Managing Identity Values.
[@pub_identity_range = ] pub_identity_range
Controls the range size at the Publisher if the article has auto_identity_range set to true. pub_identity_range is bigint, with a default of NULL.
[@identity_range = ] identity_range
Controls the range size at the Subscriber if the article has auto_identity_range set to true. identity_range is bigint, with a default of NULL. Used when auto_identity_range is set to true.
[@threshold = ] threshold
Is the percentage value that controls when the Distribution Agent assigns a new identity range. When the percentage of values specified in threshold is used, the Distribution Agent creates a new identity range. threshold is bigint, with a default of NULL. Used when auto_identity_range is set to true.
[@force_invalidate_snapshot = ] force_invalidate_snapshot
Acknowledges that the action taken by this stored procedure may invalidate an existing snapshot. force_invalidate_snapshot is a bit, with a default of 0. 0 specifies that adding an article will not cause the snapshot to be invalid. If the stored procedure detects that the change does require a new snapshot, an error will occur and no changes will be made. 1 specifies that adding an article may cause the snapshot to be invalid, and if there are existing subscriptions that would require a new snapshot, gives permission for the existing snapshot to be marked as obsolete and a new snapshot to be generated.
Return Code Values
0 (success) or 1 (failure)
Remarks
sp_addarticle is used in snapshot replication or transactional replication.
If vertical_partition is set to true, sp_addarticle defers the creation of the view until sp_articleview is called (after the last sp_articlecolumn is added).
If the publication allows immediate-updating subscriptions and the published table does not have a uniqueidentifier column, sp_addarticle adds a uniqueidentifier column to the table automatically.
The table describes the default @schema_option value that will be chosen for the stored procedure if a NULL value is passed in by the user. The default value is based upon the replication type shown across the top, and the article type shown down the first column. Empty cells are article and replication type pairs that are not valid combinations, and therefore, have no default.
Article Type | Replication Type | |
---|---|---|
Transactional | Snapshot | |
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 |
Note If a publication is enabled for queued updating, the @schema_option values of 0x8000 and 0x0080 will be added to the default value shown in the table.
Valid Schema Option Table
Article Type | Replication Type | |
---|---|---|
Transactional | Snapshot | |
logbased | All options | All options but 0x02 |
logbased manualfilter | All options | All options but 0x02 |
logbased manualview | All options | All options but 0x02 |
indexed view logbased | All options | All options but 0x02 |
indexed view logbased manualfilter | All options | All options but 0x02 |
indexed view logbased manualview | All options | All options but 0x02 |
indexed view logbase manualboth | All options | All options but 0x02 |
proc exec | 0x01 and 0x2000 | 0x01 and 0x2000 |
serialized proc exec | 0x01 and 0x2000 | 0x01 and 0x2000 |
proc schema only | 0x01 and 0x2000 | 0x01 and 0x2000 |
view schema only | 0x01, 0x0100, and 0x2000 | 0x01, 0x0100, and 0x2000 |
func schema only | 0x01 and 0x2000 | 0x01 and 0x2000 |
indexed view schema only | 0x01, 0x10, 0x040, 0x0100, and 0x2000 | 0x01, 0x10, 0x040, 0x0100, and 0x2000 |
table |
Note For queued updating publications, the @schema_option values of 0x8000 and 0x80 must be enabled.
Permissions
Only members of the sysadmin fixed server role or db_owner fixed database role can execute sp_addarticle.