Bagikan melalui


Kumpulan Baris dan Kursor SQL Server

SQL Server mengembalikan tataan hasil ke konsumen menggunakan dua metode:

  • Tataan hasil default yang:

    • Minimalkan overhead.

    • Memberikan performa maksimal dalam mengambil data.

    • Hanya mendukung fungsionalitas kursor hanya-teruskan dan baca-saja default.

    • Mengembalikan baris ke konsumen satu baris dalam satu waktu.

    • Hanya mendukung satu pernyataan aktif pada satu waktu pada koneksi.

      Setelah pernyataan dijalankan, tidak ada pernyataan lain yang dapat dijalankan pada koneksi sampai semua hasil telah diambil oleh konsumen atau pernyataan telah dibatalkan.

    • Mendukung semua pernyataan Transact-SQL.

  • Kursor server yang:

    • Mendukung semua fungsi kursor.

    • Dapat mengembalikan blok baris ke konsumen.

    • Mendukung beberapa pernyataan aktif pada satu koneksi.

    • Menyeimbangkan fungsionalitas kursor terhadap performa.

      Dukungan untuk fungsionalitas kursor dapat mengurangi performa relatif terhadap tataan hasil default. Ini dapat diimbangi jika konsumen dapat menggunakan fungsionalitas kursor untuk mengambil sekumpulan baris yang lebih kecil.

    • Jangan mendukung pernyataan Transact-SQL apa pun yang mengembalikan lebih dari satu tataan hasil.

Konsumen dapat meminta perilaku kursor yang berbeda dalam set baris dengan mengatur properti set baris tertentu. Jika konsumen tidak mengatur salah satu properti set baris ini atau mengatur semuanya ke nilai defaultnya, penyedia SQL Server Native Client OLE DB mengimplementasikan set baris menggunakan tataan hasil default. Jika salah satu properti ini diatur ke nilai selain default, penyedia SQL Server Native Client OLE DB mengimplementasikan set baris menggunakan kursor server.

Properti kumpulan baris berikut mengarahkan penyedia SQL Server Native Client OLE DB untuk menggunakan kursor SQL Server. Beberapa properti dapat dikombinasikan dengan aman dengan yang lain. Misalnya, set baris yang menunjukkan properti DBPROP_IRowsetScroll dan DBPROP_IRowsetChange akan menjadi set baris bookmark yang menunjukkan perilaku pembaruan langsung. Properti lain saling eksklusif. Misalnya, set baris yang menunjukkan DBPROP_OTHERINSERT tidak boleh berisi marka buku.

ID Properti Nilai Perilaku set baris
DBPROP_SERVERCURSOR VARIANT_TRUE Tidak dapat memperbarui data SQL Server melalui set baris. Set baris berurutan, mendukung pengguliran maju dan mengambil saja. Pemosisian baris relatif didukung. Teks perintah dapat berisi klausa ORDER BY.
DBPROP_CANSCROLLBACKWARDS atau DBPROP_CANFETCHBACKWARDS VARIANT_TRUE Tidak dapat memperbarui data SQL Server melalui set baris. Set baris mendukung pengguliran dan pengambilan di kedua arah. Pemosisian baris relatif didukung. Teks perintah dapat berisi klausa ORDER BY.
DBPROP_BOOKMARKS atau DBPROP_LITERALBOOKMARKS VARIANT_TRUE Tidak dapat memperbarui data SQL Server melalui set baris. Set baris berurutan, mendukung pengguliran maju dan mengambil saja. Pemosisian baris relatif didukung. Teks perintah dapat berisi klausa ORDER BY.
DBPROP_OWNUPDATEDELETE atau DBPROP_OWNINSERT atau DBPROP_OTHERUPDATEDELETE VARIANT_TRUE Tidak dapat memperbarui data SQL Server melalui set baris. Set baris mendukung pengguliran dan pengambilan di kedua arah. Pemosisian baris relatif didukung. Teks perintah dapat berisi klausa ORDER BY.
DBPROP_OTHERINSERT VARIANT_TRUE Tidak dapat memperbarui data SQL Server melalui set baris. Set baris mendukung pengguliran dan pengambilan di kedua arah. Pemosisian baris relatif didukung. Teks perintah dapat menyertakan klausa ORDER BY jika indeks ada pada kolom yang dirujuk.

DBPROP_OTHERINSERT tidak dapat VARIANT_TRUE jika set baris berisi marka buku. Mencoba membuat set baris dengan properti visibilitas dan marka buku ini menyebabkan kesalahan.
DBPROP_IRowsetLocate atau DBPROP_IRowsetScroll VARIANT_TRUE Tidak dapat memperbarui data SQL Server melalui set baris. Set baris mendukung pengguliran dan pengambilan di kedua arah. Bookmark dan penempatan absolut melalui antarmuka IRowsetLocate didukung di rowset. Teks perintah dapat berisi klausa ORDER BY.

DBPROP_IRowsetLocate dan DBPROP_IRowsetScroll memerlukan marka buku di set baris. Mencoba membuat set baris dengan bookmark dan DBPROP_OTHERINSERT diatur ke VARIANT_TRUE menyebabkan kesalahan.
DBPROP_IRowsetChange atau DBPROP_IRowsetUpdate VARIANT_TRUE Dapat memperbarui data SQL Server melalui set baris. Set baris berurutan, mendukung pengguliran maju dan mengambil saja. Pemosisian baris relatif didukung. Semua perintah yang mendukung kursor yang dapat diperbarui dapat mendukung antarmuka ini.
DBPROP_IRowsetLocate atau DBPROP_IRowsetScroll dan DBPROP_IRowsetChange atau DBPROP_IRowsetUpdate VARIANT_TRUE Dapat memperbarui data SQL Server melalui set baris. Set baris mendukung pengguliran dan pengambilan di kedua arah. Bookmark dan posisi absolut melalui IRowsetLocate didukung dalam rowset. Teks perintah dapat berisi klausa ORDER BY.
DBPROP_IMMOBILEROWS VARIANT_FALSE Tidak dapat memperbarui data SQL Server melalui set baris. Himpunan baris hanya mendukung pengguliran maju. Pemosisian baris relatif didukung. Teks perintah dapat menyertakan klausa ORDER BY jika indeks ada pada kolom yang dirujuk.

DBPROP_IMMOBILEROWS hanya tersedia dalam kumpulan baris yang dapat memperlihatkan SQL Server baris yang disisipkan oleh perintah pada sesi lain atau oleh pengguna lain. Mencoba membuka set baris dengan properti yang diatur ke VARIANT_FALSE pada set baris apa pun yang DBPROP_OTHERINSERT tidak dapat VARIANT_TRUE menyebabkan kesalahan.
DBPROP_REMOVEDELETED VARIANT_TRUE Tidak dapat memperbarui data SQL Server melalui set baris. Himpunan baris hanya mendukung pengguliran maju. Pemosisian baris relatif didukung. Teks perintah dapat berisi klausa ORDER BY kecuali dibatasi oleh properti lain.

Kumpulan baris penyedia OLE DB SQL Server Native Client yang didukung oleh kursor server dapat dengan mudah dibuat pada tabel atau tampilan dasar SQL Server dengan menggunakan metode IOpenRowset::OpenRowset. Tentukan tabel atau tampilan menurut nama, meneruskan kumpulan properti set baris yang diperlukan dalam parameter rgPropertySets .

Teks perintah yang membuat set baris dibatasi saat konsumen mengharuskan set baris didukung oleh kursor server. Secara khusus, teks perintah dibatasi untuk satu pernyataan SELECT yang mengembalikan satu hasil set baris atau prosedur tersimpan yang mengimplementasikan satu pernyataan SELECT yang mengembalikan satu hasil set baris.

Kedua tabel ini menunjukkan pemetaan berbagai properti OLE DB dan model kursor. Mereka juga menunjukkan properti set baris mana yang harus diatur untuk menggunakan jenis model kursor tertentu.

Setiap sel dalam tabel berisi nilai properti set baris untuk model kursor tertentu. Jenis data semua properti set baris yang tercantum sebelumnya dalam topik ini VT_BOOL dan nilai defaultnya adalah VARIANT_FALSE. Simbol berikut digunakan dalam tabel.

F = nilai default (VARIANT_FALSE)

T = VARIANT_TRUE

- = VARIANT_TRUE atau VARIANT_FALSE

Untuk menggunakan jenis model kursor tertentu, temukan kolom yang sesuai dengan model kursor dan temukan semua properti set baris dengan nilai 'T' di kolom. Atur properti set baris ini ke VARIANT_TRUE untuk menggunakan model kursor tertentu. Properti kumpulan baris dengan '-' sebagai nilai dapat diatur ke VARIANT_TRUE atau VARIANT_FALSE.

Properti set baris/model kursor Default

hasil

set

(RO)
Cepat

Maju-

hanya

(RO)
Statis

(RO)
Set kunci

Didorong

(RO)
DBPROP_SERVERCURSOR F T T T
DBPROP_DEFERRED F F - -
DBPROP_IrowsetChange F F F F
DBPROP_IrowsetLocate F F - -
DBPROP_IrowsetScroll F F - -
DBPROP_IrowsetUpdate F F F F
DBPROP_BOOKMARKS F F - -
DBPROP_CANFETCHBACKWARDS F F - -
DBPROP_CANSRCOLLBACKWARDS F F - -
DBPROP_CANHOLDROWS F F - -
DBPROP_LITERALBOOKMARKS F F - -
DBPROP_OTHERINSERT F T F F
DBPROP_OTHERUPDATEDELETE F T F T
DBPROP_OWNINSERT F T F T
DBPROP_OWNUPDATEDELETE F T F T
DBPROP_QUICKSTART F F - -
DBPROP_REMOVEDELETED F F F -
DBPROP_IrowsetResynch F F F -
DBPROP_CHANGEINSERTEDROWS F F F F
DBPROP_SERVERDATAONINSERT F F F -
DBPROP_UNIQUEROWS - F F F
DBPROP_IMMOBILEROWS - - - T
Properti set baris/Model kursor Dinamis (RO) Set kunci (R/W) Dinamis (R/W)
DBPROP_SERVERCURSOR T T T
DBPROP_DEFERRED - - -
DBPROP_IrowsetChange F - -
DBPROP_IrowsetLocate F - F
DBPROP_IrowsetScroll F - F
DBPROP_IrowsetUpdate F - -
DBPROP_BOOKMARKS F - F
DBPROP_CANFETCHBACKWARDS - - -
DBPROP_CANSRCOLLBACKWARDS - - -
DBPROP_CANHOLDROWS F - F
DBPROP_LITERALBOOKMARKS F - F
DBPROP_OTHERINSERT T F T
DBPROP_OTHERUPDATEDELETE T T T
DBPROP_OWNINSERT T T T
DBPROP_OWNUPDATEDELETE T T T
DBPROP_QUICKSTART - - -
DBPROP_REMOVEDELETED T - T
DBPROP_IrowsetResynch - - -
DBPROP_CHANGEINSERTEDROWS F - F
DBPROP_SERVERDATAONINSERT F - F
DBPROP_UNIQUEROWS F F F
DBPROP_IMMOBILEROWS F T F

Untuk sekumpulan properti set baris tertentu, model kursor yang dipilih ditentukan sebagai berikut.

Dari kumpulan properti kumpulan baris yang ditentukan, dapatkan subset properti yang tercantum dalam tabel sebelumnya. Bagi properti ini menjadi dua subgrup tergantung pada nilai bendera yang diperlukan (T, F) atau opsional (-)-dari setiap properti set baris. Untuk setiap model kursor, mulailah di tabel pertama dan pindah dari kiri ke kanan., Bandingkan nilai properti dalam dua subgrup dengan nilai properti terkait di kolom tersebut. Model kursor yang tidak memiliki ketidakcocokan dengan properti yang diperlukan dan jumlah ketidakcocokan paling sedikit dengan properti opsional dipilih. Jika ada lebih dari satu model kursor, yang paling kiri dipilih.

Ukuran Blok Kursor SQL Server

Saat kursor SQL Server mendukung kumpulan baris penyedia OLE DB SQL Server Native Client, jumlah elemen dalam parameter array handle baris dari metode IRowset::GetNextRows atau IRowsetLocate::GetRowsAt menentukan ukuran blok kursor. Baris yang ditunjukkan oleh handel dalam array adalah anggota blok kursor.

Untuk rowset yang mendukung marka buku, handel baris diambil dengan menggunakan metode IRowsetLocate::GetRowsByBookmark menentukan anggota blok kursor.

Terlepas dari metode yang digunakan untuk mengisi set baris dan membentuk blok kursor SQL Server, blok kursor aktif sampai metode pengambilan baris berikutnya dijalankan pada set baris.

Lihat juga

Kumpulan baris