Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Database SQL di Microsoft Fabric
Anda dapat menentukan indeks pada kolom komputasi selama persyaratan berikut terpenuhi:
- Persyaratan kepemilikan
- Persyaratan determinisme
- Persyaratan presisi
- Persyaratan jenis data
- Persyaratan opsi SET
Catatan
SET QUOTED_IDENTIFIER harus ON ketika Anda membuat atau mengubah indeks pada kolom komputasi atau tampilan terindeks. Untuk informasi selengkapnya, lihat SET QUOTED_IDENTIFIER (Transact-SQL).
Persyaratan kepemilikan
Semua referensi fungsi dalam kolom komputasi harus memiliki pemilik yang sama dengan tabel.
Persyaratan determinisme
Ekspresi bersifat deterministik jika selalu mengembalikan hasil yang sama untuk serangkaian input tertentu.
IsDeterministic Properti fungsi COLUMNPROPERTY melaporkan apakah computed_column_expression deterministik.
Computed_column_expression harus deterministik. Computed_column_expression deterministik ketika semua hal berikut ini benar:
Semua fungsi yang direferensikan oleh ekspresi bersifat deterministik dan tepat. Fungsi-fungsi ini mencakup fungsi yang ditentukan pengguna dan bawaan. Untuk informasi selengkapnya, lihat Fungsi Deterministik dan Nondeterministik. Fungsi mungkin tidak tepat jika kolom komputasi adalah
PERSISTED. Untuk informasi selengkapnya, lihat Membuat indeks pada kolom komputasi yang dipertahankan terlambat di artikel ini.Semua kolom yang direferensikan dalam ekspresi berasal dari tabel yang berisi kolom komputasi.
Tidak ada referensi kolom yang menarik data dari beberapa baris. Misalnya, fungsi agregat seperti
SUMatauAVGbergantung pada data dari beberapa baris dan akan membuat computed_column_expression nondeterministik.computed_column_expression tidak memiliki akses data sistem atau akses data pengguna.
Setiap kolom komputasi yang berisi ekspresi runtime bahasa umum (CLR) harus deterministik dan ditandai PERSISTED sebelum kolom dapat diindeks. Ekspresi jenis yang ditentukan pengguna CLR diizinkan dalam definisi kolom komputasi. Kolom komputasi yang jenisnya adalah jenis yang ditentukan pengguna CLR dapat diindeks selama jenisnya sebanding. Untuk informasi selengkapnya, lihat Jenis yang Ditentukan Pengguna CLR.
CAST dan CONVERT
Saat Anda merujuk ke literal string dari jenis data tanggal dalam kolom komputasi terindeks di SQL Server, kami sarankan Anda secara eksplisit mengonversi literal ke jenis tanggal yang Anda inginkan dengan menggunakan gaya format tanggal deterministik. Untuk daftar gaya format tanggal yang deterministik, lihat CAST dan CONVERT.
Untuk informasi selengkapnya, lihat Konversi nondeterministik string tanggal harfiah menjadi nilai DATE.
Tingkat kompatibilitas
Konversi implisit data karakter non-Unicode antara kolase dianggap tidak deterministik, kecuali tingkat kompatibilitas diatur ke 80 atau sebelumnya.
Saat pengaturan tingkat kompatibilitas database adalah 90, Anda tidak dapat membuat indeks pada kolom komputasi yang berisi ekspresi ini. Namun, kolom komputasi yang ada yang berisi ekspresi ini dari database yang ditingkatkan dapat dipertahankan. Jika Anda menggunakan kolom komputasi terindeks yang berisi string implisit ke konversi tanggal, untuk menghindari kemungkinan kerusakan indeks, pastikan pengaturan LANGUAGE dan DATEFORMAT konsisten dalam database dan aplikasi Anda.
Tingkat 90 kompatibilitas sesuai dengan SQL Server 2005 (9.x).
Persyaratan presisi
Computed_column_expression harus tepat. Computed_column_expression tepat ketika satu atau beberapa hal berikut ini benar:
Ini bukan ekspresi jenis data float atau nyata .
Ini tidak menggunakan jenis data float atau nyata dalam definisinya. Misalnya, dalam pernyataan berikut, kolom
ybersifat int dan deterministik tetapi tidak tepat.CREATE TABLE t2 (a int, b int, c int, x float, y AS CASE x WHEN 0 THEN a WHEN 1 THEN b ELSE c END);
Catatan
Setiap float atau ekspresi nyata dianggap tidak tepat dan tidak dapat menjadi kunci indeks; float atau ekspresi nyata dapat digunakan dalam tampilan terindeks tetapi bukan sebagai kunci. Ini berlaku juga untuk kolom komputasi. Fungsi, ekspresi, atau fungsi yang ditentukan pengguna dianggap tidak tepat jika berisi float atau ekspresi nyata . Ini termasuk yang logis (perbandingan).
Properti IsPreciseCOLUMNPROPERTY fungsi melaporkan apakah computed_column_expression tepat.
Persyaratan jenis data
- computed_column_expression yang ditentukan untuk kolom komputasi tidak dapat mengevaluasi ke jenis data teks, ntext, atau gambar.
- Kolom komputasi yang berasal dari tipe data gambar, ntext, teks, varchar(max), nvarchar(max), varbinary(max), dan xml dapat diindeks selama jenis data kolom komputasi diizinkan sebagai kolom kunci indeks.
- Kolom komputasi yang berasal dari tipe data gambar, ntext, dan teks dapat berupa kolom non-kunci (disertakan) dalam indeks non-kluster selama jenis data kolom komputasi diizinkan sebagai kolom indeks non-kunci.
Persyaratan opsi SET
Opsi
ANSI_NULLStingkat koneksi harus diatur keONsaatCREATE TABLEpernyataan atauALTER TABLEyang menentukan kolom komputasi dijalankan. Fungsi OBJECTPROPERTY melaporkan apakah opsi aktif melaluiIsAnsiNullsOnproperti .Koneksi tempat indeks dibuat, dan semua koneksi yang mencoba
INSERT, ,UPDATEatauDELETEpernyataan yang akan mengubah nilai dalam indeks, harus memiliki enamSETopsi yang diatur keONdan satu opsi diatur keOFF. Pengoptimal mengabaikan indeks pada kolom komputasi untuk pernyataan apa punSELECTyang dijalankan oleh koneksi yang tidak memiliki pengaturan opsi yang sama ini.Opsi
NUMERIC_ROUNDABORTharus diatur keOFF, dan opsi berikut harus diatur keON:ANSI_NULLSANSI_PADDINGANSI_WARNINGSARITHABORTCONCAT_NULL_YIELDS_NULLQUOTED_IDENTIFIER
Catatan
Pengaturan ANSI_WARNINGS untuk ON mengatur secara implisit ARITHABORT ke ON saat tingkat kompatibilitas database diatur ke 90 atau lebih tinggi.
Membuat indeks pada kolom komputasi yang dipertahankan
Terkadang Anda dapat membuat kolom komputasi yang ditentukan dengan ekspresi yang deterministik namun tidak tepat. Anda dapat melakukan ini saat kolom ditandai PERSISTED dalam CREATE TABLE pernyataan atau ALTER TABLE .
Ini berarti bahwa Mesin Database menyimpan nilai komputasi dalam tabel, dan memperbaruinya ketika kolom lain tempat kolom komputasi bergantung diperbarui. Mesin Database menggunakan nilai yang dipertahankan ini saat membuat indeks pada kolom, dan ketika indeks dirujuk dalam kueri.
Opsi ini memungkinkan Anda membuat indeks pada kolom komputasi ketika Mesin Database tidak dapat membuktikan dengan akurasi apakah fungsi yang mengembalikan ekspresi kolom komputasi, terutama fungsi CLR yang dibuat dalam .NET Framework, adalah deterministik dan tepat.
Catatan
Anda tidak dapat membuat indeks yang difilter pada kolom komputasi.