When you create or update a schema holder, the DataServer uses the following guidelines to select a column in a data source table to support the ROWID function:
If the data source table has a PROGRESS_RECID column, the DataServer selects that column. A column of this type provides optimal support for the ROWID function; you cannot select an alternative to it. To create a PROGRESS_RECID column, see Using triggers to enable PROGRESS_RECID support of the ROWID function.
If the data source table does not have a PROGRESS_RECID column, the DataServer evaluates the available indexes and selects one according to the following criteria:
The index must be defined as unique.
The index must be defined as mandatory, or at least treated as such by your application.
The index selection process proceeds, according to the following order:
1. If you select an index, then you must select a qualified index.
2. If you do not select an index, the MS SQL Server DataServer selects a qualified index based on a single-component integer.
However, if the DataServer determines that more than one qualified index meets the additional criterion as a single-component integer, the DataServer selects the first index that fulfills the complete criteria.
3. If the MS SQL Server DataServer cannot find a qualified index based on a single-component integer, it seeks a qualified index that is multi-component and/or non-integer.
However, if the DataServer determines that more than one qualified index meets the additional criterion as multi-component and/or non-integer, the DataServer selects the first index that fulfills the complete criteria.
4. If the MS SQL Server DataServer cannot find a qualified index that is a multi-component and/or non-integer, the task cannot be completed and ROWID support is not provided. The table will not be able to uniquely identify any records. As a result, implementing FIND statements and performing queries could lead to inaccuracies in locating records.
The indexes in this class are not mandatory; therefore, it is essential that you enforce the column supporting ROWID as mandatory at least through code if not through definitions.
Note: The MSS DataServer was enhanced to require less bandwidth for ROWID in networked messages containing data records. This improves progress networking performance for client/server DataServer applications. With this enhancement, the ROWID area stored in the record buffer is shorter in size. Reduced storage size of ROWID in the record buffer is enabled by default in the MSS DataServer. Due to this enhancement, the ROWID buffer size can now be set to as low as 13 bytes if the ROWID selected for tables is chosen as the PROGRESS_RECID surrogate key or any similar existing, single component, unique key, integer index.
The DataServer allocates a buffer to hold the key information for the selected RECID index. The buffer is 245 bytes by default. If the index you select for the RECID is a multi-component index, this may be inadequate. The size of the buffer can be modified with the -Dsrv ZPRGRS_RECID_BUF_SIZE,n option. See Old format RECID Buffer size: the ZPRGRS_RECID_BUF_SIZE,nnn Option for more information on setting this option.
Note: An index that you select as a ROWID must be defined as a unique index. It must also be mandatory, if not by definition, then by means of the application code.