Dizinler üzerinde hesaplanan sütunlar oluşturma

Aşağıdaki koşulları yerine getirildiği sürece, hesaplanan sütunlar üzerinde dizinler tanımlayabilirsiniz:

  • Sahiplik gereksinimleri

  • Determinism gereksinimleri

  • Duyarlık gereksinimleri

  • Veri türü gereksinimleri

  • set seçenek gereksinimleri

Sahiplik gereksinimleri

Tüm işlev başvuruları hesaplanan sütun tablo olarak aynı sahip olması gerekir.

Determinism gereksinimleri

Her zaman aynı sonucu küme girdileri için dönerseniz deterministic deyimleridir.The IsDeterministic property of the COLUMNPROPERTY function reports whether a computed_column_expression is deterministic.

  • The computed_column_expression must be deterministic.A computed_column_expression birini veya daha fazlasını doğru deterministic olur:

    • Tarafından başvurulan tüm işlevleri ifade deterministic ve kesin.Bu işlevler kullanıcı tanımlı her ikisini de içerir ve yerleşik işlevler.Daha fazla bilgi için bkz: Deterministic ve FUNCTION işlevleri.Hesaplanan sütun kalıcı, günümüzdeki işlevleri olabilir.Daha fazla bilgi için bkz: Oluşturma dizinler üzerinde hesaplanan sütunlar kalıcı bu konuda daha sonra.

    • İfadesine başvurulan tüm sütunların gelir tablo , hesaplanan sütun içerir.

    • Hiçbir sütun başvurusu birden çok satır verileri çeker.Örneğin, TOPLA veya ortalama gibi toplu işlevlerini birden çok satır verileri bağlıdır ve yapacağı bir computed_column_expression FUNCTION.

    • Sistem veri erişimi ya da kullanıcı veri erişimi vardır.

  • Sütunu dizine önce ortak dil çalışma zamanı (clr) ifade içeren hesaplanan sütun deterministic ve işaretli PERSISTED olmalıdır.clr kullanıcı tanımlı tür ifadeler hesaplanan sütun tanımlarında izin verilir.Hesaplanan sütun türü olan bir CLR kullanıcı tanımlı tür türü karşılaştırılabilir olduğu sürece sıralanabilir.Daha fazla bilgi için bkz: clr kullanıcı tanımlı türler.

Not

Ne zaman tarih veri türü dize hazır bilgileri bakın dizinlenmiş Hesaplanmış sütunlarda SQL Server, öneririz, açıkça dönüştürmek hazır bilgi tarih türüne, istediğiniz kullanarak bir deterministic tarih biçimi stili.Deterministic tarih biçimlendirme stilleri bir listesi için bkz: ARTIĞINI ve convert.Tarih veri türleri için kapalý dönüþtürme karakter dizeleri içeren ifadeler değerlendirilir FUNCTION, veritabanı uyumluluk düzey olmadığı sürece küme 80 veya daha önce.sonuçlar bağlıdır bu çünkü dili ve VBLONGDATE sunucusu oturum ayarlar.Örneğin, sonuçlar ifadenin CONVERT (datetime, '30 listopad 1996', 113) çünkü dil ayarına göre değişir dize '30 listopad 1996' farklı dillerde farklı ay anlamına gelir.Benzer şekilde, ifade DATEADD(mm,3,'2000-12-01'), Veritabanı Altyapısı dize yorumlar '2000-12-01' göre VBLONGDATE ayarı.

Unicode olmayan karakter veri harmanlamaları arasında örtülü dönüşüm da dikkate alınır FUNCTION, uyumluluk düzeyni olmadığı sürece küme 80 veya daha önce.

Veritabanı uyumluluk düzey 90 olduğunda, bu ifadeler içeren hesaplanan sütunlar üzerinde dizinler oluşturulamıyor.Ancak, yükseltilen bir veritabanından alınan bu ifadeler içeren varolan hesaplanmış sütunlar rahat.Örtülü içeren dizinlenmiş hesaplanmış sütunları kullanırsanız, dize tarih için olası dizin bozulmasını önlemek için dönüşümler, dil ve VBLONGDATE ayarlarını, veritabanları ve uygulamaları tutarlı olduğundan emin olun.

Duyarlık gereksinimleri

The computed_column_expression must be precise.A computed_column_expression bir veya daha fazla aşağıdaki doğru olduğunda kesin olan:

  • Bir ifade, değil float veya real veri türü.

  • Kullanan bir float veya real veri türü, tanımı.Örneğin, aşağıdaki deyim içinde sütun y olan int ve deterministic ancak kesin değil.

    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

Tüm float veya real ifade olarak kabul edilir günümüzdeki ve bir anahtar dizin; olamaz bir float veya real ifade kullanılabilir bir dizinli görünüm ancak olarak değil anahtar.Bu hesaplanan sütunlar için de geçerlidir.Her işlev, ifade, veya kullanıcı tanımlı işlevin herhangi içeriyorsa, günümüzdeki değerlendirilir float veya real ifades.Bu mantıksal sürücüler içerir (karşılaştırma).

The IsPrecise property of the COLUMNPROPERTY function reports whether a computed_column_expression is precise.

Veri türü gereksinimleri

  • The computed_column_expression defined for the computed column cannot evaluate to the text, ntext, or image data types.

  • Hesaplanan sütunlar türetilen image, ntext, text, varchar(max), nvarchar(max), varbinary(max), ve xml olarak hesaplanan sütun veri türü olarak izin verilen veri türlerini dizinlenebilirbir dizin anahtar sütunu.

  • Hesaplanan sütunlar türetilen image, ntext, ve text veri türleri olabilir kümelenmemiş dizin anahtarı olmayan (dahil) sütunlar olarak hesaplanan sütun veri türü olan izin verilen bir dizin anahtarı olmayan sütun.

set seçenek gereksinimleri

  • Hesaplanan sütun tanımlayan create table veya alter table deyim yürütüldüğünde ANSI_NULLS bağlantı düzey seçenek on olarak küme olması gerekir.The OBJECTPROPERTY function reports whether the option is on through the IsAnsiNullsOn property.

  • Dizin oluşturulan bağlantı ve çalışırken dizin değerlerini değiştirir INSERT, update veya delete deyimleri tüm bağlantıları altı küme seçenekleri on olarak ayarlayın ve bir seçeneği off için küme olması gerekir.Dizin yok sayar iyileştirici bir hesaplanan sütun için bu aynı seçenek ayarları olan bir bağlantı tarafından yürütülen bir deyim.

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

    • ANSI_NULLS

    • ANSI_PADDING

    • ANSI_WARNINGS

    • ARITHABORT

    • CONCAT_NULL_YIELDS_NULL

    • QUOTED_IDENTIFIER

    Veritabanı uyumluluk düzey 90 olarak ayarlandığında ANSI_WARNINGS on olarak örtülü olarak ayarlanması ARITHABORT on olarak küme.Veritabanı uyumluluk düzey ise küme 80 veya daha önce ARITHABORT seçeneği açık olmalıdır küme açık.Daha fazla bilgi için bkz: Sonuçları etkileyen seçeneklerini ayarlama.

Kalıcı Hesaplanmış sütunlarda dizinleri oluşturma

Sütun create table veya alter table deyiminde PERSISTED işaretliyse, deterministic ancak günümüzdeki, bir deyim ile tanımlı hesaplanan sütun üzerinde dizin oluşturabilirsiniz.Bunun anlamı Veritabanı Altyapısı hesaplanan değerleri saklayan tablove hesaplanan sütun bağımlı olduğu diğer sütunlara güncelleştirilme zamanını güncelleştirir.The Veritabanı Altyapısı uses these persisted values when it creates an index on the column, and when the index is referenced in a query.hesaplanan sütun üzerinde dizin oluşturmak bu seçeneği sağlar, Veritabanı Altyapısı doğrulukla döndüren bir işlev sütun ifadeler, özellikle de oluşturulan bir CLR işlevi hesaplanmış olup olmadığını kanıtlamak olamaz .NET Framework, deterministik ve kesin.