Fungsi JetOpenTempTable

Berlaku untuk: Windows | Windows Server

Fungsi JetOpenTempTable

Fungsi JetOpenTempTable membuat tabel sementara dengan satu indeks. Tabel sementara menyimpan dan mengambil rekaman seperti tabel biasa yang dibuat menggunakan JetCreateTableColumnIndex. Namun, tabel sementara jauh lebih cepat daripada tabel biasa karena sifatnya yang volatil. Mereka juga dapat digunakan untuk mengurutkan dengan sangat cepat dan melakukan penghapusan duplikat pada kumpulan catatan ketika diakses secara murni berurutan.

    JET_ERR JET_API JetOpenTempTable(
      __in          JET_SESID sesid,
      __in          const JET_COLUMNDEF* prgcolumndef,
      __in          unsigned long ccolumn,
      __in          JET_GRBIT grbit,
      __out         JET_TABLEID* ptableid,
      __out         JET_COLUMNID* prgcolumnid
    );

Parameter

sesid

Sesi yang akan digunakan.

prgcolumndef

Definisi kolom untuk kolom yang dibuat dalam tabel sementara.

Batasan penting ada untuk opsi definisi kolom yang digunakan dengan tabel sementara. Lihat bagian Keterangan untuk informasi selengkapnya.

Selain opsi definisi kolom biasa, nol atau beberapa opsi berikut juga dapat ditentukan yang hanya relevan dalam konteks tabel sementara.

Nilai

Makna

JET_bitColumnTTDescending

Urutan pengurutan kolom kunci untuk tabel sementara harus turun daripada naik. Jika opsi ini ditentukan tanpa JET_bitColumnTTKey maka opsi ini diabaikan.

JET_bitColumnTTKey

Kolom akan menjadi kolom kunci untuk tabel sementara.

Urutan definisi kolom dengan opsi ini yang ditentukan dalam array input akan menentukan prioritas setiap kolom kunci untuk tabel sementara. Definisi kolom pertama dalam array yang memiliki set opsi ini akan menjadi kolom kunci yang paling signifikan dan sebagainya. Jika lebih banyak kolom kunci diminta daripada yang dapat didukung oleh mesin database, maka opsi ini diabaikan untuk kolom kunci yang tidak didukung.

ccolumn

Lihat prgcolumndef.

grbit

Sekelompok bit yang menentukan nol atau beberapa opsi berikut.

Nilai

Makna

JET_bitTTErrorOnDuplicateInsertion

Setiap upaya untuk menyisipkan rekaman dengan kunci indeks yang sama dengan rekaman yang disisipkan sebelumnya akan segera gagal dengan JET_errKeyDuplicate. Jika opsi ini tidak diminta maka duplikat terdeteksi segera dan gagal, atau dihapus secara diam-diam nanti, tergantung pada strategi yang dipilih oleh mesin database untuk mengimplementasikan tabel sementara, berdasarkan fungsionalitas yang diminta.

Jika fungsionalitas ini tidak diperlukan maka yang terbaik adalah tidak memintanya. Jika fungsionalitas ini tidak diminta, manajer tabel sementara mungkin dapat memilih strategi untuk mengelola tabel sementara yang akan menghasilkan peningkatan performa.

JET_bitTTForceMaterialization

Memaksa manajer tabel sementara untuk meninggalkan pencarian strategi terbaik untuk menggunakan pengelolaan tabel sementara yang akan menghasilkan peningkatan performa.

JET_bitTTForwardOnly

Tabel sementara hanya dibuat jika manajer tabel sementara dapat menggunakan implementasi yang dioptimalkan untuk hasil kueri perantara. Jika ada karakteristik tabel sementara yang akan mencegah penggunaan pengoptimalan ini maka operasi akan gagal dengan JET_errCannotMaterializeForwardOnlySort.

Efek samping dari opsi ini adalah memungkinkan tabel sementara berisi rekaman dengan kunci indeks duplikat. Lihat JET_bitTTUnique untuk informasi selengkapnya.

Opsi ini hanya tersedia pada rilis Windows Server 2003 dan yang lebih baru.

JET_bitTTIndexed

Opsi ini meminta agar tabel sementara cukup fleksibel untuk mengizinkan penggunaan JetSeek untuk mencari rekaman berdasarkan kunci indeks.

Jika fungsionalitas ini tidak diperlukan maka yang terbaik adalah tidak memintanya. Jika fungsionalitas ini tidak diminta, manajer tabel sementara mungkin dapat memilih strategi untuk mengelola tabel sementara yang akan menghasilkan peningkatan performa.

JET_bitTTUnique

Permintaan agar rekaman dengan kunci indeks duplikat dihapus dari kumpulan rekaman akhir dalam tabel sementara.

Sebelum Windows Server 2003, mesin database selalu mengasumsikan opsi ini berlaku karena fakta bahwa semua indeks berkluster juga harus menjadi kunci utama dan dengan demikian harus unik. Pada Windows Server 2003, sekarang dimungkinkan untuk membuat tabel sementara yang tidak menghapus duplikat ketika opsi JET_bitTTForwardOnly juga ditentukan.

Tidak mungkin untuk mengetahui duplikat mana yang akan berhasil dan duplikat mana yang akan dibuang, secara umum. Namun, ketika opsi JET_bitTTErrorOnDuplicateInsertion diminta, rekaman pertama dengan kunci indeks tertentu yang akan dimasukkan ke dalam tabel sementara akan selalu berhasil.

JET_bitTTUpdatable

Meminta agar tabel sementara cukup fleksibel untuk memungkinkan rekaman yang sebelumnya telah disisipkan untuk kemudian diubah. Jika fungsionalitas ini tidak diperlukan maka yang terbaik adalah tidak memintanya.

Jika fungsionalitas ini tidak diminta, manajer tabel sementara mungkin dapat memilih strategi untuk mengelola tabel sementara yang akan menghasilkan peningkatan performa.

JET_bitTTScrollable

Meminta agar tabel sementara cukup fleksibel untuk memungkinkan rekaman dipindai dalam urutan dan arah arbitrer menggunakan JetMove.

Jika fungsionalitas ini tidak diperlukan maka yang terbaik adalah tidak memintanya. Jika fungsionalitas ini tidak diminta, manajer tabel sementara mungkin dapat memilih strategi untuk mengelola tabel sementara yang akan menghasilkan peningkatan performa.

JET_bitTTSortNullsHigh

Permintaan agar nilai kolom kunci NULL diurutkan lebih dekat ke akhir indeks daripada nilai kolom kunci non-NULL.

JET_bitTTIntrinsicLVsOnly

Permintaan untuk mengizinkan hanya nilai panjang intrinsik.

Windows 7: JET_bitTTIntrinsicLVsOnly diperkenalkan di Windows 7.

ptableid

Buffer output yang menerima kursor baru dibuka pada tabel sementara yang baru dibuat.

prgcolumnid

Buffer output yang menerima array ID kolom yang dihasilkan selama pembuatan tabel sementara.

ID kolom dalam array ini akan sama persis dengan array input definisi kolom. Akibatnya, ukuran buffer ini harus sesuai dengan ukuran array input.

Tampilkan Nilai

Fungsi ini mengembalikan jenis data JET_ERR dengan salah satu kode pengembalian berikut. Untuk informasi selengkapnya tentang kemungkinan kesalahan ESE, lihat Kesalahan Mesin Penyimpanan yang Dapat Diperluas dan Parameter Penanganan Kesalahan.

Menampilkan kode

Deskripsi

JET_errSuccess

Operasi berhasil diselesaikan.

JET_errCannotMaterializeForwardOnlySort

JetOpenTempTable gagal karena JET_bitTTForwardOnly ditentukan dan tabel sementara seperti yang ditentukan tidak dapat dibuat menggunakan pengoptimalan maju-saja. Kesalahan ini hanya akan dikembalikan oleh Windows Server 2003 dan rilis yang lebih baru.

JET_errClientRequestToStopJetService

Tidak mungkin untuk menyelesaikan operasi karena semua aktivitas pada instans yang terkait dengan sesi telah berhenti sebagai akibat dari panggilan ke JetStopService.

JET_errIndexInvalidDef

Indeks tidak dapat dibuat karena definisi indeks tidak valid ditentukan.

JetOpenTempTable akan mengembalikan kesalahan ini ketika:

  • Lokal Netral Bahasa ditentukan.

  • Sekumpulan bendera normalisasi yang tidak valid ditentukan.

Kesalahan ini hanya akan dikembalikan oleh Windows 2000.

JET_errInstanceUnavailable

Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi telah mengalami kesalahan fatal yang mengharuskan akses ke semua data dicabut untuk melindungi integritas data tersebut. Kesalahan ini hanya akan dikembalikan oleh Windows XP dan rilis yang lebih baru.

JET_errInvalidCodePage

Bidang cp JET_COLUMNDEF tidak diatur ke halaman kode yang valid. Satu-satunya nilai yang valid untuk kolom teks adalah Bahasa Inggris (1252) dan Unicode (1200). Nilai 0 berarti default akan digunakan (Inggris, 1252).

JET_errInvalidColumnType

Bidang coltypJET_COLUMNDEF tidak diatur ke tipe kolom yang valid.

JET_errInvalidLanguageId

Indeks tidak dapat dibuat karena upaya dilakukan untuk menggunakan ID lokal yang tidak valid. ID lokal mungkin benar-benar tidak valid atau paket bahasa terkait mungkin tidak diinstal.

JET_errInvalidLCMapStringFlags

Indeks tidak dapat dibuat karena upaya dilakukan untuk menggunakan set bendera normalisasi yang tidak valid. Kesalahan ini hanya akan dikembalikan oleh Windows XP dan rilis yang lebih baru. Pada Windows 2000, bendera normalisasi yang tidak valid akan menghasilkan JET_errIndexInvalidDef sebagai gantinya.

JET_errInvalidSesid

Handel sesi tidak valid atau mengacu pada sesi tertutup.

Catatan Kesalahan ini tidak dikembalikan dalam semua keadaan. Handel divalidasi hanya berdasarkan upaya terbaik.

JET_errNotInitialized

Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi belum diinisialisasi.

JET_errOutOfCursors

Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk membuka kursor baru. Sumber daya kursor dikonfigurasi menggunakan JetSetSystemParameter dengan JET_paramMaxCursors.

JET_errOutOfMemory

Operasi gagal karena memori tidak cukup dapat dialokasikan untuk menyelesaikannya.

JetOpenTempTable dapat mengembalikan JET_errOutOfMemory jika ruang alamat proses host menjadi terlalu terfragmentasi. Manajer tabel sementara akan selalu mengalokasikan potongan ruang alamat 1MB untuk setiap tabel sementara yang dibuat terlepas dari jumlah data yang akan disimpan.

JET_errRestoreInProgress

Tidak dimungkinkan untuk menyelesaikan operasi karena operasi pemulihan sedang berlangsung pada instans yang terkait dengan sesi.

JET_errSessionSharingViolation

Sesi yang sama tidak dapat digunakan untuk lebih dari satu utas secara bersamaan.

Kesalahan ini hanya akan dikembalikan oleh Windows XP dan rilis yang lebih baru.

JET_errTermInProgress

Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi sedang dimatikan.

JET_errTooManyColumns

Upaya dilakukan untuk menambahkan terlalu banyak kolom ke tabel. Tabel tidak boleh memiliki lebih dari JET_ccolFixedMost kolom tetap, tidak lebih dari JET_ccolVarMost kolom panjang variabel, dan tidak lebih dari kolom yang diberi tag JET_ccolTaggedMost.

JET_errTooManyOpenIndexes

Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk menyimpan indeks tabel. Jumlah indeks yang skemanya dapat di-cache dikonfigurasi menggunakan JetSetSystemParameter dengan JET_paramMaxOpenTables.

JET_errTooManyOpenTables

Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk menyimpan skema tabel. Jumlah tabel yang skemanya dapat di-cache dikonfigurasi menggunakan JetSetSystemParameter dengan JET_paramMaxOpenTables.

JET_errTooManySorts

Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk membuat tabel sementara. Sumber daya tabel sementara dikonfigurasi menggunakan JetSetSystemParameter dengan JET_paramMaxTemporaryTables.

Jika berhasil, kursor yang dibuka pada tabel sementara yang baru dibuat akan dikembalikan. Status database sementara akan disiapkan untuk memuat tabel sementara baru. Status database biasa apa pun yang digunakan oleh mesin database akan tetap tidak berubah.

Jika gagal, tabel sementara tidak akan dibuat dan kursor tidak akan dikembalikan. Status database sementara dapat diubah. Status database biasa apa pun yang digunakan oleh mesin database akan tetap tidak berubah.

Keterangan

Tabel sementara tidak mendukung pelengkap penuh opsi definisi kolom yang biasanya didukung oleh mesin database. Bahkan, hanya JET_bitColumnFixed dan JET_bitColumnTagged yang didukung. Ini berarti bahwa tidak dimungkinkan untuk membuat kolom kenaikan otomatis, versi, atau multinilai dalam tabel sementara. Akhirnya, kolom pembaruan escrow tidak didukung karena tidak berguna dalam tabel sementara karena hanya dapat digunakan oleh satu sesi pada satu waktu. Jika salah satu opsi ini diminta, opsi tersebut akan diabaikan.

Tabel sementara tidak mendukung nilai default. Jika definisi kolom disediakan yang berisi spesifikasi nilai default, spesifikasi tersebut akan diabaikan.

Tabel sementara dikembalikan ke pemanggil sebagai hasil dari banyak fungsi ESE yang berbeda. Misalnya, JetGetIndexInfo dengan opsi JET_IdxInfo yang diatur dalam parameter InfoLevel akan mengembalikan tabel sementara yang berisi daftar semua kolom kunci dalam indeks tertentu. Tabel sementara mengikuti aturan siklus hidup yang sama dengan tabel sementara biasa seperti yang dijelaskan di sini.

Tabel sementara juga digunakan secara internal oleh mesin database untuk banyak tugas. Yang paling penting dari tugas-tugas ini adalah pembuatan indeks melalui tabel yang ada. Tabel sementara akan digunakan untuk mengurutkan kunci indeks yang digunakan untuk membuat indeks tersebut.

Semua tabel sementara disimpan dalam database sementara. Database sementara adalah file database khusus yang dipertahankan selama masa pakai instans ESE dan dihapus ketika instans tersebut dimatikan atau dimulai ulang. Lokasi database sementara dapat dikonfigurasi menggunakan JetSetSystemParameter dengan JET_paramTempPath. Penempatan database sementara pada disk relatif terhadap file log transaksi dan file database Anda mungkin penting jika aplikasi Anda sering menggunakan tabel sementara atau sering membuat indeks.

Siklus hidup tabel sementara terkait dengan kursor yang mereferensikannya. Jika semua kursor yang mereferensikan tabel sementara ditutup, baik secara implisit maupun eksplisit, tabel sementara akan dihapus. Jika tabel sementara dibuat di dalam transaksi dan transaksi tersebut kemudian digulung balik, tabel sementara akan dihapus karena kursor apa pun yang mereferensikannya saat ini akan ditutup secara implisit. Kursor baru dapat mereferensikan tabel sementara hanya melalui penggunaan JetDupCursor. Dalam hal ini, kursor baru akan diposisikan pada entri indeks pertama tabel sementara. JetDupCursor hanya akan berfungsi selama fase penggunaan tertentu untuk tabel sementara. Lihat keterangan mengenai kemampuan kursor tabel sementara untuk informasi selengkapnya. Tidak dimungkinkan untuk mereferensikan tabel sementara dari lebih dari satu sesi pada satu waktu.

Ada masalah penting di JetDupCursor yang memengaruhi tabel sementara. Jika upaya dilakukan untuk menduplikasi tabel sementara yang berada dalam mode maju-saja maka kursor yang dihasilkan tidak akan dibuat dengan benar dan akan tidak berfungsi. Masih aman untuk menduplikasi kursor di atas tabel sementara yang terwujud.

Manajer tabel sementara dapat memilih untuk menerapkan tabel sementara dengan tiga cara. Metode pertama adalah mempertahankan tabel dalam memori. Strategi ini adalah yang tercepat tetapi hanya dapat digunakan untuk tabel sementara yang kecil dan sederhana. Metode kedua adalah membuat pengurutan berbasis disk yang dapat didorong menggunakan iterator khusus maju. Strategi ini hanya dapat digunakan dalam keadaan tertentu dan merupakan cara tercepat untuk mengurutkan dan menghapus duplikat dari himpunan data yang sangat besar. Metode ketiga adalah membuat Pohon B+ di database sementara untuk menahan tabel sementara. Strategi ini adalah yang paling lambat, tetapi yang paling serbaguna, dan disebut sebagai tabel sementara materialisasi. Strategi ini dapat digunakan dalam kombinasi untuk akhirnya mencapai fungsionalitas yang diminta dari tabel sementara.

Ketika tabel sementara tidak terwujud, tabel tersebut digunakan terutama dalam dua fase utama. Fase pertama adalah fase penyisipan di mana tabel diisi dengan himpunan data awalnya. Selama fase ini, hanya penyisipan data yang diizinkan. Fase ini berakhir ketika upaya dilakukan untuk memindahkan kursor menggunakan JetMove atau JetSeek. Fase kedua adalah fase ekstraksi data. Selama fase ini, data yang disimpan dalam tabel sementara dapat diekstraksi sesuai dengan kemampuan yang diminta saat tabel sementara dibuat.

Kapabilitas Kursor Tabel Sementara

Ketika tabel sementara terwujud, kursor memiliki kemampuan berikut tetapi dapat dibatasi lebih lanjut oleh opsi yang diminta:

Ketika tabel sementara tidak terwujud dan berada dalam fase sisipan, kursor memiliki kemampuan berikut tetapi dapat dibatasi lebih lanjut oleh opsi yang diminta:

Ketika tabel sementara tidak terwujud dan berada dalam fase ekstrak, kursor memiliki kemampuan berikut tetapi dapat dibatasi lebih lanjut oleh opsi yang diminta:

Persyaratan

Persyaratan Nilai

Klien

Memerlukan Windows Vista, Windows XP, atau Windows 2000 Professional.

Server

Memerlukan Windows Server 2008, Windows Server 2003, atau Windows 2000 Server.

Header

Dinyatakan dalam Esent.h.

Pustaka

Gunakan ESENT.lib.

DLL

Membutuhkan ESENT.dll.

Lihat juga

JET_COLUMNDEF
JET_COLUMNID
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_UNICODEINDEX
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
Parameter Database Sementara