共用方式為


索引鍵集導向的資料指標

索引鍵集驅動資料指標會提供在靜態與動態資料指標之間偵測變更的功能。 如同靜態資料指標,它不一定會偵測結果集的成員資格和順序變更。 就像動態資料指標一樣,該指標會偵測結果集中資料列值的變更 (受限於交易的隔離等級,如 SQL_ATTR_TXN_ISOLATION 連線屬性所設定)。

索引鍵集驅動資料指標會在開啟時儲存整個結果集的索引鍵;這會修正結果集的明顯成員資格和順序。 當資料指標在結果集上捲動時,便會使用此索引鍵集中的索引鍵來擷取每個資料列的目前資料值。 例如,假設索引鍵集驅動資料指標擷取一個資料列,而其他應用程式接著更新該資料列。 如果資料指標重新擷取資料列,則其看到的值是新的值,因為是使用資料列的索引鍵來重新擷取資料列。 因此,索引鍵集驅動資料指標一律會偵測本身或其他程式所做的變更。

當資料指標嘗試擷取已刪除的資料列時,此資料列會在結果集中顯示為「漏洞」:資料列的索引鍵會存在於索引鍵集中,但資料列已不存在於結果集中。 如果更新資料列中的索引鍵值,則會將資料列視為刪除後再插入的資料列,因此這類資料列也會在結果集中顯示為漏洞。 雖然索引鍵集驅動資料指標一律可以偵測到其他程式刪除的資料列,但可能會選擇性地從索引鍵集移除其本身刪除之資料列的索引鍵。 執行此動作的索引鍵集驅動資料指標無法偵測自己的刪除作業。 您可以透過 SQLGetInfo 中的 SQL_STATIC_SENSITIVITY 選項,回報特定索引鍵集驅動資料指標是否可偵測自身的刪除作業。

索引鍵集驅動資料指標永遠不會看到由其他程式插入的資料列,因為索引鍵集中沒有這些資料列的索引鍵。 不過,索引鍵集驅動資料指標可以選擇性地為其插入索引鍵集的資料列新增索引鍵。 執行此動作的索引鍵集驅動資料指標可偵測自己的插入作業。 您可以透過 SQLGetInfo 中的 SQL_STATIC_SENSITIVITY 選項,回報特定索引鍵集驅動資料指標是否可偵測自身的插入作業。

SQL_ATTR_ROW_STATUS_PTR 陳述式屬性所指定的資料列狀態陣列可以包含任何資料列的 SQL_ROW_SUCCESS、SQL_ROW_SUCCESS_WITH_INFO 或 SQL_ROW_ERROR。 這會針對偵測到更新、刪除或插入的資料列傳回 SQL_ROW_UPDATED、SQL_ROW_DELETED 或 SQL_ROW_ADDED。

索引鍵集驅動資料指標通常會透過建立暫存資料表來實作,並在資料表中包含結果集中每個資料列的索引鍵。 因為資料指標也必須判斷資料列是否已更新,所以此資料表包含的資料行通常也會具有資料列版本設定資訊。

若要在原始的結果集上捲動,索引鍵集驅動資料指標會在暫存資料表上開啟靜態資料指標。 若要擷取原始結果集中的資料列,資料指標會先從暫存資料表擷取適當的索引鍵,然後擷取資料列的目前值。 如果使用區塊游標,則資料指標必須擷取多個索引鍵和資料列。