Kumpulan Baris dan Kursor SQL Server

Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Unduh driver OLE DB

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 kumpulan baris dengan mengatur properti set baris tertentu. Jika konsumen tidak mengatur salah satu properti set baris ini atau mengatur semuanya ke nilai default mereka, Driver OLE DB untuk SQL Server mengimplementasikan set baris menggunakan tataan hasil default. Jika salah satu properti ini diatur ke nilai selain default, Driver OLE DB untuk SQL Server mengimplementasikan set baris menggunakan kursor server.

Properti kumpulan baris berikut mengarahkan Driver OLE DB untuk SQL Server 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 kumpulan baris marka buku yang menunjukkan perilaku pembaruan segera. Properti lain saling eksklusif. Misalnya, kumpulan 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. Kumpulan 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. Kumpulan 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. Kumpulan 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. Kumpulan 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. Kumpulan 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 kumpulan baris berisi marka buku. Mencoba membuat kumpulan 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. Kumpulan baris mendukung pengguliran dan pengambilan di kedua arah. Marka buku dan posisi 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 kumpulan baris dengan marka buku dan DBPROP_OTHERINSERT diatur ke VARIANT_TRUE menyebabkan kesalahan.
DBPROP_IRowsetChange atau DBPROP_IRowsetUpdate VARIANT_TRUE Dapat memperbarui data SQL Server melalui kumpulan baris. Kumpulan 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 kumpulan baris. Kumpulan baris mendukung pengguliran dan pengambilan di kedua arah. Marka buku dan posisi absolut melalui IRowsetLocate didukung dalam kumpulan baris. Teks perintah dapat berisi klausa ORDER BY.
DBPROP_IMMOBILEROWS VARIANT_FALSE Tidak dapat memperbarui data SQL Server melalui set baris. Kumpulan 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 menampilkan SQL Server baris yang disisipkan oleh perintah pada sesi lain atau oleh pengguna lain. Mencoba membuka kumpulan baris dengan properti 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. Kumpulan baris hanya mendukung pengguliran maju. Pemosisian baris relatif didukung. Teks perintah dapat berisi klausa ORDER BY kecuali dibatasi oleh properti lain.

Driver OLE DB untuk kumpulan baris SQL Server 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 kumpulan 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 set 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, mulai 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 Driver OLE DB untuk kumpulan baris SQL Server, jumlah elemen dalam baris menangani parameter array IRowset::GetNextRows atau metode 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 kumpulan baris dan membentuk blok kursor SQL Server, blok kursor aktif hingga metode pengambilan baris berikutnya dijalankan pada set baris.

Lihat juga

Kumpulan baris