Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Aşağıdaki gereksinimler karşılandığı sürece hesaplanan sütunlarda dizinler tanımlayabilirsiniz:
- Sahiplik gereksinimleri
- Determinizm gereksinimleri
- Hassasiyet gereksinimleri
- Veri türü gereksinimleri
- SET seçeneği gereksinimleri
Uyarı
SET QUOTED_IDENTIFIER hesaplanan sütunlarda veya dizinlenmiş görünümlerde dizin oluştururken veya değiştirirken ON olmalıdır. Daha fazla bilgi için bkz . SET QUOTED_IDENTIFIER (Transact-SQL).
Sahiplik gereksinimleri
Hesaplanan sütundaki tüm işlev başvurularının, tablo ile aynı sahibin olması gerekir.
Determinizm gereksinimleri
İfadeler, belirtilen giriş kümesi için her zaman aynı sonucu döndüren belirleyicidir.
IsDeterministic
COLUMNPROPERTY işlevinin IsDeterministic özelliği, bir computed_column_expression ifadesinin belirleyici olup olmadığını bildirir.
computed_column_expression belirleyici olmalıdır. Aşağıdakilerin tümü doğru olduğunda computed_column_expression belirleyici olur:
İfade tarafından referans verilen tüm işlevler belirleyici ve kesindir. Bu işlevler hem kullanıcı tanımlı hem de yerleşik işlevleri içerir. Daha fazla bilgi için Deterministik ve Deterministik Olmayan Fonksiyonlar'a bakın. hesaplanan sütun ise
PERSISTEDişlevler belirsiz olabilir. Daha fazla bilgi için bu makalenin devamında kalıcı hesaplanan sütunlarda dizin oluşturma bölümüne bakın.İfadede başvuruda bulunan tüm sütunlar hesaplanan sütunu içeren tablodan gelir.
Hiçbir sütun başvurusu birden çok satırdan veri çekmez. Örneğin,
SUM,AVGgibi toplama işlevleri birden çok satırdan alınan verilere bağlıdır ve bu da computed_column_expression'i belirleyici bir hale getirmez.computed_column_expression sistem veri erişimi veya kullanıcı veri erişimi yoktur.
Ortak dil çalışma zamanı (CLR) ifadesi içeren tüm hesaplanan sütunlar, sütunun dizine alınabilmesi için önce deterministik olmalı ve PERSISTED olarak işaretlenmelidir. Hesaplanan sütun tanımlarında CLR kullanıcı tanımlı tür ifadelerine izin verilir. Türü CLR kullanıcı tanımlı türü olan hesaplanan sütunlar, tür karşılaştırılabilir olduğu sürece dizine eklenebilir. Daha fazla bilgi için Bkz. CLR Kullanıcı Tanımlı Türler.
CAST ve CONVERT
SQL Server'da dizine alınmış hesaplanmış sütunlarda tarih veri türüne ait dize sabit değerlerine başvurduğunuzda, bu sabit değeri belirleyici bir tarih formatı stili kullanarak istediğiniz tarih türüne açıkça dönüştürmenizi öneririz. Belirleyici olan tarih biçimi stillerinin listesi için bkz. CAST ve CONVERT.
Daha fazla bilgi için bkz. Değişmez tarih dizelerini TARİh değerlerine dönüştürme.
Uyumluluk düzeyi
Unicode olmayan karakter verilerinin farklı harmanlamalar arasında örtük dönüştürülmesi, uyumluluk düzeyi 80 veya daha önceki bir düzeye ayarlanmamışsa belirsiz olarak kabul edilir.
Veritabanı uyumluluk düzeyi ayarı olduğunda 90, bu ifadeleri içeren hesaplanan sütunlarda dizin oluşturamazsınız. Ancak, yükseltilen veritabanındaki bu ifadeleri içeren mevcut hesaplanan sütunlar korunabilir. Örtük dize içeren ve tarih dönüştürmeleri olan dizine alınmış hesaplanan sütunlar kullanıyorsanız, olası dizin bozulmalarını önlemek için LANGUAGE ve DATEFORMAT ayarlarının veritabanlarınızda ve uygulamalarınızda tutarlı olduğundan emin olun.
Uyumluluk düzeyi 90 SQL Server 2005'e (9.x) karşılık gelir.
Hassasiyet gereksinimleri
computed_column_expression kesin olmalıdır. Aşağıdakilerden biri veya daha fazlası doğru olduğunda computed_column_expression kesindir:
Kayan veyagerçek veri türlerinin ifadesi değildir.
Tanımında float veya gerçek veri türü kullanmaz. Örneğin, aşağıdaki deyimde sütun
yint şeklindedir, deterministik ancak kesin değildir.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);
Uyarı
Herhangi bir float veya real ifade kesin olmayan olarak kabul edilir ve bir dizinin anahtarı olamaz; bir float veya real ifade, dizinli görünümde kullanılabilir ancak anahtar olarak kullanılamaz. Bu, hesaplanan sütunlar için de geçerlidir. Herhangi bir işlev, ifade veya kullanıcı tanımlı işlev, float veya real ifadeler içeriyorsa kesin değil olarak kabul edilir. Buna mantıksal olanlar (karşılaştırmalar) dahildir.
IsPrecise işlevinin COLUMNPROPERTY özelliği, computed_column_expression'ın kesin olup olmadığını bildirir.
Veri türü gereksinimleri
- Hesaplanan sütun için tanımlanan computed_column_expressionmetin, ntext veya görüntü veri türlerini değerlendiremez.
- image, ntext, text, varchar(max), nvarchar(max), varbinary(max) ve xml veri türlerinden türetilen hesaplanan sütunlar, hesaplanan sütun veri türü bir dizin anahtarı sütunu olarak kabul edilebildiği sürece dizine eklenebilir.
- Resim, ntext ve metin veri türlerinden türetilen hesaplanan sütunlar, hesaplanmış sütun veri türü anahtar olmayan bir dizin sütunu olarak izin verebildiği sürece, kümelenmemiş dizinde anahtar olmayan (dahil) sütunlar olabilir.
SET seçeneği gereksinimleri
Hesaplanan sütunu tanımlayan
ANSI_NULLSveya yürütülenONdeyimi sırasında,CREATE TABLEbağlantı düzeyi seçeneğineALTER TABLEolarak ayarlanmalıdır. OBJECTPROPERTY işlevi, seçeneğin özelliği aracılığıylaIsAnsiNullsOnaçık olup olmadığını bildirir.Dizinin oluşturulduğu bağlantı ve dizindeki değerleri değiştirecek
INSERT,UPDATE, veyaDELETEdeyimlerini deneyen tüm bağlantıların altıSETseçeneğiONolarak ve bir seçeneğiOFFolarak ayarlanmış olmalıdır. İyileştirici, aynı seçenek ayarlarına sahip olmayan bir bağlantı tarafından yürütülen herhangiSELECTbir deyim için hesaplanan sütundaki bir dizini yoksayar.NUMERIC_ROUNDABORTseçeneğiOFFolarak ayarlanmalıdır ve aşağıdaki seçeneklerONolarak ayarlanmalıdır:ANSI_NULLSANSI_PADDINGANSI_WARNINGSARITHABORTCONCAT_NULL_YIELDS_NULLQUOTED_IDENTIFIER
Uyarı
ANSI_WARNINGS ayarlandığında, veritabanı uyumluluk düzeyi 90 veya daha yüksek olduğunda ON, ARITHABORT örtük olarak ON olarak ayarlanır.
Kalıcı hesaplanan sütunlarda dizin oluşturma
Bazen, belirlenici ancak kesin olmayan bir ifadeyle tanımlanan hesaplanan bir sütun oluşturabilirsiniz.
PERSISTED veya CREATE TABLE deyiminde sütun ALTER TABLE işaretlendiğinde bunu yapabilirsiniz.
Bu, Veritabanı Altyapısı'nın hesaplanan değerleri tabloda depoladığı ve hesaplanan sütunun bağımlı olduğu diğer sütunlar güncelleştirildiğinde bunları güncelleştirdiği anlamına gelir. Veritabanı Altyapısı, sütunda dizin oluştururken ve bir sorguda dizine başvurulduğunda bu kalıcı değerleri kullanır.
Bu seçenek, Veritabanı Altyapısı hesaplanan sütun ifadeleri döndüren bir işlevin, özellikle de .NET Framework'te oluşturulan CLR işlevinin hem belirleyici hem de kesin olup olmadığını doğru olarak kanıtlayamıyorsa hesaplanan sütunda dizin oluşturmanıza olanak tanır.
Uyarı
Hesaplanan sütunda filtrelenmiş dizin oluşturamazsınız.