Hesaplanan sütun dizinlerde

Aşağıdaki gereksinimler karşılandığı sürece dizinler üzerinde hesaplanan sütunlar tanımlayabilirsiniz:

  • Sahiplik gereksinimleri

  • Determinism gereksinimleri

  • Duyarlık gereksinimleri

  • Veri türü gereksinimleri

  • set seçenek gereksinimleri

Sahiplik gereksinimleri

Hesaplanmış sütundaki tüm işlev başvuruları, tablo olarak aynı sahip olması gerekir.

Determinism gereksinimleri

Önemli notÖnemli

Her zaman aynı sonucu belirlenen girişleri için dönerseniz deterministik ifadelerdir. IsDeterministic özelliği columnproperty işlevi raporlar olup bir computed_column_expressiondeterministic olur.

computed_column_expressionDeterministic olmalı. A computed_column_expressionbir veya daha aşağıdaki doğru olduğunda deterministic olur:

  • Deyim tarafından başvurulan tüm fonksiyonları, deterministik ve hassas. Bu işlevler, kullanıcı tanımlı hem yerleşik fonksiyonları içerir. Daha fazla bilgi için, bkz. Deterministik ve Nondeterministic işlevler. İşlevler, hesaplanan sütun kalıcı imprecise olabilir. Daha fazla bilgi için bkz: Dizinler üzerinde hesaplanan sütunlar kalıcı bu konuda.

  • Ifadede başvurulan tüm sütunları hesaplanmış bir sütun içeren tablosundan gelir.

  • Hiçbir sütun başvurusu birden çok satır verileri çeker. Örneğin, Topla veya avg gibi toplama işlevleri birden çok satır verileri bağlıdır ve yapacak bir computed_column_expressionnondeterministic.

  • computed_column_expressionSistem veri erişimi veya kullanıcı veri erişim hiçbir.

Ortak dil çalışma zamanı (clr) ifade içeren herhangi bir hesaplanmış bir sütun, sütun indekslenecek önce deterministik ve işaretli PERSISTED olması gerekir. clr kullanıcı tanımlı türü ifadeler hesaplanmış sütun tanımları izin verilir. Hesaplanan bir clr türü kullanıcı tanımlı türü benzer olduğu sürece indekslenecek türü olan sütunlar. Daha fazla bilgi için, bkz. clr kullanıcı tanımlı türler.

[!NOT]

Ne zaman sen-den sözetmek-e doğru tarih veri türü dize hazır bilgi dizinlenmiş Hesaplanmış sütunlarda SQL Server, size açıkça bire bir deterministik Tarih biçimi stili kullanarak istediğiniz tarihi türe dönüştürmek olduğunu öneririz. Deterministic Tarih biçimi stiller listesi cast ve convert. Veritabanı uyumluluk düzeyi 80 veya daha önceki ayarlanmadığı sürece örtük dönüştürme Tarih veri türleri karakter dizeleri içeren ifadeler nondeterministic, kabul edilir. Bu sonuçlar bağlıdır çünkü dili ve dateformat ayarları sunucu oturumu. Örneğin, deyimin sonuçlarına CONVERT (datetime, '30 listopad 1996', 113)Dil çünkü bağlıdır dize '30 listopad 1996' farklı diller için farklı aylarda anlamına gelir. Benzer şekilde, ifadesinde DATEADD(mm,3,'2000-12-01'), Veritabanı Altyapısıdize yorumlayan '2000-12-01'dateformat ayarına göre.

Uyumluluk düzeyi 80 veya daha önceki ayarlanmadığı sürece Unicode karakter veri harmanlamaları arasında örtülü dönüşüm de nondeterministic, kabul edilir.

Veritabanı uyumluluk düzeyi ayarı 90 olduğunda, bu ifadeler içeren hesaplanan sütunlarda dizinleri oluşturamazsınız. Ancak, yükseltilen veritabanından alınan bu ifadeler içeren varolan hesaplanmış sütunları bakımı. Olası Index yolsuzluk, önlemek için tarihi dönüşümler örtülü dizesinin dizinlenmiş hesaplanmış sütunları kullanırsanız, dil ve Tarih biçimi ayarları, veritabanları ve uygulamaları tutarlı olduğundan emin olun.

Duyarlık gereksinimleri

computed_column_expressionHassas olmalı. A computed_column_expressionbir veya daha aşağıdaki doğru olduğunda kesin olan:

  • Bir ifade değildir floatya realveri türlerini.

  • Kullanmayın bir floatya realveri türü tanımı. Örneğin, aşağıdaki deyimi içinde sütun yolan intve deterministic ancak değil kesin.

    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);
    

[!NOT]

Herhangi bir floatveya realifade imprecise olarak kabul edilir ve bir anahtar dizin; olamaz bir floatya realdeyimi dizin oluşturulmuş görünüm içinde ancak bir anahtar olarak kullanılmış olabilir. Bu da hesaplanan sütunlar için geçerlidir. Herhangi bir işlevi, ifade veya kullanıcı tanımlı işlevin imprecise herhangi varsa kabul floatya realifadeler. Bu mantıksal olanlar içerir (karşılaştırma).

IsPrecise özelliği columnproperty işlevi raporlar olup bir computed_column_expressionhassas.

Veri türü gereksinimleri

  • computed_column_expressionİçin hesaplanan sütun için değerlendirilemiyor tanımlanan text, ntext, ya imageveri türlerini.

  • Hesaplanan sütunlar türetilen image, ntext, text, varchar(max), nvarchar(max), varbinary(max), ve xmlveri türleri dizinlenmiş hesaplanmış sütun veri türü dizin anahtar sütunu izin verilen olduğu sürece.

  • Hesaplanan sütunlar türetilen image, ntext, ve textveri türleri, hesaplanan sütun veri türü nonkey dizin sütun olarak izin verilen olduğu sürece kümelendirilmemiş dizin nonkey (dahil) sütunlar olabilir.

set seçenek gereksinimleri

  • Hesaplanan sütun tanımlayan create table veya alter table deyimi yürütüldüğünde ansı_nulls bağlantı düzeyi seçeneği on olarak ayarlanmalıdır. objectproperty seçeneği ile elde olup olmadığını raporlar işlevi IsAnsiNullsOn özelliği.

  • Bağlantı üzerinde bir dizin oluşturulur ve tüm bağlantılar, dizin değerlerini değiştirir INSERT, update veya delete deyimleri çalışırken altı set seçenekleri on olarak ayarlanmış ve bir seçeneği off için ayarlanmış olması gerekir. Doktoru bu aynı seçenek ayarları olmayan bir bağlantı tarafından yürütülen bir select deyimi için hesaplanmış bir sütun üzerinde dizin yok sayar.

    • NUMERIC_ROUNDABORT seçeneği off için ayarlanmış olması gerekir ve aşağıdaki seçenekleri on olarak ayarlanmış olması gerekir:

    • ANSI_NULLS

    • ANSI_PADDING

    • ANSI_WARNINGS

    • ARITHABORT

    • CONCAT_NULL_YIELDS_NULL

    • QUOTED_IDENTIFIER

    Veritabanı uyumluluk düzeyi 90 veya daha yüksek olarak ayarlandığında ANSI_WARNINGS on olarak ayarlanması, örtülü ARITHABORT on olarak ayarlar. Daha fazla bilgi için, bkz. SET Options That Affect Results.

Dizinler üzerinde kalıcı hesaplanmış sütunlar oluşturma

Sütun create table veya alter table deyimi içinde PERSISTED işaretlenmişse, deterministic ancak imprecise, ifadesi ile tanımlanan hesaplanmış bir sütun üzerinde dizin oluşturabilirsiniz. Bu demektir ki Veritabanı Altyapısıtablodaki hesaplanmış değerleri depolar ve hesaplanan sütun bağımlı olduğu diğer sütunlara güncelleştirilme zamanını onları güncelleştirir. Veritabanı AltyapısıBu kalıcı değerleri sütun üzerinde bir dizin oluşturur ve dizin sorguda başvurulan kullanır. Hesaplanmış bir sütun üzerinde dizin oluşturmak bu seçeneği sağlar ne zaman Veritabanı Altyapısıdoğrulukla döndüren bir işlev sütun ifadeler, özellikle de oluşturulan clr işlevi hesaplanmış olup olmadığını ispat edemez .NET Framework, deterministik ve hassas.

İlişkili İçerik

Creating Indexes (Database Engine)

columnproperty (Transact-sql)