Stored procedures and functions used in replication
BuildWhereClauseSp
This stored procedure takes an input set of column names and values and builds a WHERE clause to return to the caller. If no @TableAlias is provided, no table alias is used. All values are wrapped in quotes to simplify the logic, allowing implicit type conversions to occur. All values except the first can be NULL in the WHERE clause.
DeleteRemoteNotesSp
This stored procedure is meant to be run at a remote site. For the notes pertaining to the single row of the input @TableName specified by the @ToRowPointer or @ToWhereClause if @ToRowPointer is null, this stored procedure performs these actions:
- Deletes any specific notes attached to that record
- Deletes any ObjectNotes records attached to that record that point to specific notes, user notes, or system notes
- Deletes any NotesSiteMap records that connect from the @FromSite to any of the specific notes deleted
This stored procedure does not remove reusable notes (user or system).
InitRemoteServerSp
This stored procedure sets up a remote procedure operation, INSERT operation, UPDATE operation, DELETE operation, or stored procedure call. The replicating flag indicates whether this stored procedure instructs the triggers to fire in the remote server.
MakeRemoteObjectNotesSp
This stored procedure is used to create an ObjectNotes record. It is called at the remote site and assumes the system, user, or specific notes records have already been created before it is called. The NotesSiteMap table records which map in which notes were last copied from a particular site, and it must also be up-to-date before this routine is called. If @ToRowPointer is null, then @ToWhereClause is used to get the rowpointer.
RemoteInfobarSaveSp
This stored procedure saves the passed-in infobar into a session variable that is retrieved by the ResetRemoteServerSp stored procedure. This stored procedure should be called by any procedures that are called remotely and that have an @Infobar output parameter.
If the Infobar contains a message, RemoteInfobarSaveSp generates an exception from the database. This is how the error message gets back to the IDO layer without it knowing in what parameter of a method call was the error message return.
RemoteMethodCallSp
This stored procedure is used to call another stored procedure at a remote site. The name of the site, the name of the stored procedure, and the parameter values must be passed.
For delayed replication, a "Success" status merely indicates that the call was successfully saved for later processing.
For transactional replication, the stored procedure makes a call directly to the remote server. The remotely called stored procedure is expected to use the RemoteInfobarSaveSp stored procedure to return any error message. If the remotely called stored procedure is not found, RemoteMethodCallSp returns an error message that indicates an improper setup of replication rules.
If the To Site is the same as the local site, this stored procedure executes the stored procedure locally. If the To Site is transactionally linked to the local site, the stored procedure is called on that server. If the To Site is not transactionally linked to the local site, data is stored in the ReplicatedRows3_mst and ShadowValues tables to save the method and parameters for later replication through XML documents.
RemoteMethodForReplicationTargetsSp
This stored procedure calls the RemoteMethodCallSp stored procedure for the input method for every target site currently defined in the replication rules.
RemoteReplSpCreateCodeSp
This function generates the SQL code that creates a remote server stored procedure for pulling data to that site from this site.
ResetRemoteServerSp
When this stored procedure runs, the session information on this (the remote server for an operation) is wiped out. It also retrieves the infobar session variable value, which might or might not have been set.
TransferNotesToSiteSp
This stored procedure allows all the notes for a particular row of a table to be copied to a remote site. The RowPointer of the local site table is used to see what notes are tied to the record locally. Additionally, a “to where” clause which will retrieve that same record at the remote system is also needed. The equivalent record at a remote site might not have the same RowPointer value as the one on the local site, which is why a WHERE clause is used.
If the ToRowPointer is known, you can use that instead of the ToWhereClause. While the local record could be retrieved using this same where clause, the RowPointer is more efficient; hence, both are required by this stored procedure. The BuildWhereClauseSp stored procedure can be used to build a WHERE clause. The @DeleteFirst flag indicates whether the existing notes for the remote record should be removed before copying the notes from the current site.
Here is an example call:
EXEC @Severity = BuildWhereClauseSp
@WhereClause = @WhereClause OUTPUT
, @Key1Name = 'item'
, @Key1Value = @ItemItem
EXEC @Severity = TransferNotesToSiteSp
@ToSite = @RemoteSite
, @TableName = 'item'
, @RowPointer = @ItemRowPointer
, @ToWhereClause = @WhereClause
, @ToRowPointer = NULL
, @DeleteFirst = 1
, @Infobar OUTPUT
If you are at the remote site and have the RowPointer for the record at both sites, you can just call TransferNotesToSiteSp from the remote site back to the original site using RemoteMethodCallSp.