Harmanlama önceliği (Transact-SQL)

Harmanlama önceliği, harmanlama zorlama kuralları olarak da bilinen, aşağıdakileri belirler:

  • harmanlama sonucunu bir karakter dizedeğerlendirilen bir ifade .

  • harmanlamatarafından kullanılan harmanlama -karakter dize girdileri kullanın, ancak bir karakter dizegibi benzer döndürmeyin duyarlı işleçleri ve IN.

harmanlama önceliği kurallar yalnızca karakter dize veri türleri için geçerlidir: char, varchar, text, nchar, nvarchar, and ntext.Diğer veri türlerine sahip nesne harmanlama değerlendirmeleri yer almayan.

Harmanlama etiketleri

Aşağıdaki tablo , listeler ve tüm nesnelerin alfabe tanımlanan dört kategorileri açıklanmıştır.Her kategorinin adını harmanlama etiketi verilir.

Harmanlama etiketi

Nesne türleri

Coercible varsayılan

Tüm Transact-SQL karakter dize değişkeni, parametre, hazır bilgi ya da çıktı bir katalog yerleşik işlevveya yerleşik bir işlev dize girdileri etkili ancak üreten bir dize çıktı.

Nesneyi, nesnenin bir kullanıcı tanımlı işlev, saklı yordamveya tetikleyiciyi bildirilirse, işlev, saklı yordamveya tetikleyiciyi oluşturulduğu veritabanının varsayılan harmanlama atanır.toplu işişlemde nesneyi bildirirseniz, nesnenin bağlantı için geçerli veritabanının varsayılan harmanlama atanır.

Örtülü x

Bir sütun başvurusu.ifade (x) harmanlama tablo veya görünümünde sütun için tanımlanmış harmanlama alınır.

' % S'sütun sütun açıkça bir harmanlama create table veya create VIEW deyimcollate yan tümce kullanarak bile atanmışsa, sütun başvurusunu örtülü olarak sınıflandırılır.

Açık x

Belirli bir harmanlama için (x) ifadecollate yan tümce kullanarak açıkça artığını bir ifade .

No -harmanlama

Bir ifade değerinin örtülü harmanlama etiket çakışan harmanlamaları iki dizeleri arasındaki bir işlem sonucu olduğunu gösterir.ifade sonucu bir harmanlamasahip değil olarak tanımlanır.

Harmanlama kuralları

Yalnızca bir karakter dize nesne başvuran basit ifade harmanlama etiketi başvurulan nesnenin harmanlama etikettir.

Başvuran aynı harmanlama etiketi iki işlenen ifadelerle karmaşık ifade harmanlama etiketi işlenen deyimleri harmanlama etikettir.

Farklı alfabe ile iki işlenen ifadeler başvuran karmaşık ifade sonucunu harmanlama etiketi aşağıdaki kurallara dayanır:

  • Açık kapalı önceliklidir.Dolaylı Coercible varsayılan önceliğe sahiptir:

    Açık > örtülü > Coercible varsayılan

  • Farklı alfabe atanmış iki açık ifadeler birleştiren bir hata oluşturur:

    Açık x + açık y = hata

  • Farklı alfabe sahip iki örtülü ifadeler birleştirme No -harmanlamasonucunu verir:

    Örtülü x + örtülü y = No -harmanlama

  • (Bkz: Aşağıdaki kural) bir ifade ile Hayır -harmanlama harmanlama açık dışında herhangi bir etiket bir ifade ile birleştirerek Noharmanlama etiketi olan bir sonuç verir:

    No -harmanlama + şey = No -harmanlama

  • Bir ifade ile Hayır -harmanlama açık bir harmanlamasahip bir ifade ile birleştirerek açık etiket ifade verir:

    No -harmanlama + açık x = açık

Kuralları aşağıdaki tablo özetlenmiştir.

İşlenen zorlama etiketi

Açık x

Örtülü x

Coercible varsayılan

No -harmanlama

Açık y

Hata üretir

Açık y sonucudur

Açık y sonucudur

Açık y sonucudur

Örtülü y

Açık x sonucudur

No -harmanlamasonucudur

Örtülü y sonucudur

No -harmanlamasonucudur

Coercible varsayılan

Açık x sonucudur

Örtülü x sonucudur

Sonuç Coercible varsayılan olur.

No -harmanlamasonucudur

No -harmanlama

Açık x sonucudur

No -harmanlamasonucudur

No -harmanlamasonucudur

No -harmanlamasonucudur

Aşağıdaki ek kurallar, harmanlama önceliği için de geçerlidir:

  • Zaten açık olan bir ifadeolan bir ifade birden çok collate yan tümceleri olamaz.Örneğin, aşağıdaki WHEREyan tümce geçerli değil çünkü bir COLLATEyan tümce zaten açık bir ifadeolan bir ifade için belirtilen:

    WHERE ColumnA = ( 'abc' COLLATE French_CI_AS) COLLATE French_CS_AS

  • Kod sayfa dönüştürme text veri türleri verilmez.Atama yapılamaz bir bir harmanlama farklı kod sayfaları varsa başka birtextifade . Atama işleç sol metin işlenen'den farklı bir kod sayfası sağa metin işleci harmanlama sahip olduğunda değerleri atayamazsınız.

Veri türü dönüştürme sonra harmanlama önceliği belirler.harmanlama sonuç alındığı işlenen son sonuç veri türünü sağlayan işlenen farklı olabilir.Örneğin, aşağıdaki toplu işgöz önünde bulundurun:

CREATE TABLE TestTab
   (PrimaryKey int PRIMARY KEY,
    CharCol char(10) COLLATE French_CI_AS
   )

SELECT *
FROM TestTab
WHERE CharCol LIKE N'abc'

Unicode veri türü, Basit ifade N'abc' daha yüksek veri yazın önceliği.Bu nedenle, sonuçta elde edilen ifade atanan Unicode veri türüne sahip N'abc'.Ancak, ifade CharCol , dolaylı, harmanlama etiketi varsa ve N'abc' Coercible, daha düşük bir zorlama etiket-varsayılan.Bu nedenle, kullanılan harmanlama olan French_CI_AS harmanlama CharCol.

Harmanlama kural örnekleri

Aşağıdaki örnekler, harmanlama kurallarını nasıl çalıştığını gösterir.Örnekleri çalıştırmak için aşağıdaki sınama tablooluşturun.

USE tempdb;
GO

CREATE TABLE TestTab (
   id int, 
   GreekCol nvarchar(10) collate greek_ci_as, 
   LatinCol nvarchar(10) collate latin1_general_cs_as
   )
INSERT TestTab VALUES (1, N'A', N'a');
GO

Harmanlama çakışma ve hata

Aşağıdaki sorgu yüklemi harmanlama çakışma var ve bir hata üretir.

SELECT * 
FROM TestTab 
WHERE GreekCol = LatinCol;

Sonuç kümesi buradadır.

Msg 448, Level 16, State 9, Line 2
Cannot resolve collation conflict between 'Latin1_General_CS_AS' and 'Greek_CI_AS' in equal to operation.

Etiket açık.Örtülü etiketi

Aşağıdaki sorgu yüklemi harmanlamadeğerlendirilengreek_ci_as çünkü sağ ifade var. açık etiket Bu ifadesol örtülü etiket üzerinde önceliğe sahiptir.

SELECT * 
FROM TestTab 
WHERE GreekCol = LatinCol COLLATE greek_ci_as;

Sonuç kümesi buradadır.

id          GreekCol             LatinCol
----------- -------------------- --------------------
          1 A                    a

(1 row affected)

Hayır harmanlama etiketleri

CASE Aşağıdaki Sorgulardaki Deyimler vardır bir Hayırharmanlama etiket; Bu nedenle, bunlar seçim listesinde bulunamaz veya harmanlamatarafından işletilen üzerinde-duyarlı işleçleri.Ancak, ifadeler üzerinde harmanlamaişletilebilir-duyarlı işleçleri.

SELECT (CASE WHEN id > 10 THEN GreekCol ELSE LatinCol END) 
FROM TestTab;

Sonuç kümesi buradadır.

Msg 451, Level 16, State 1, Line 1
Cannot resolve collation conflict for column 1 in SELECT statement.

SELECT PATINDEX((CASE WHEN id > 10 THEN GreekCol ELSE LatinCol END), 'a')
FROM TestTab;

Sonuç kümesi buradadır.

Msg 446, Level 16, State 9, Server LEIH2, Line 1
Cannot resolve collation conflict for patindex operation.

SELECT (CASE WHEN id > 10 THEN GreekCol ELSE LatinCol END) COLLATE Latin1_General_CI_AS 
FROM TestTab;

Sonuç kümesi buradadır.

--------------------
a

(1 row affected)

Harmanlama duyarlı ve duyarlı harmanlamayı

İşleçleri ve işlevleri ya da harmanlama duyarlı veya duyarlı olur.

  • Harmanlama duyarlı
    Bu bir Hayır -harmanlama belirtme işlenensaat olduğu anlamına gelir.ifade sonucu yok -harmanlamaolamaz.

  • Harmanlama duyarlı
    Bu, işlenen ve sonuç No -harmanlamaolabilir anlamına gelir.

İşleçler ve harmanlama

Karşılaştırma işleçleri ve MAK, MIN, arasında benzer ve operatörleri, harmanlama duyarlı olur.İşleçleri tarafından kullanılan dize daha yüksek önceliğe sahip işlenenin harmanlama etiket atanır.BİRLEŞİM işleç harmanlama duyarlı ve tüm dize işlenen olduğu ve kesin sonucu işlenen harmanlama önceliği en yüksek olan atanır.harmanlama önceliği BİRLİĞİ Değerlendirilmiş sütun sütuntarafından işlenen ve sonucu olan.

Atama işleç harmanlama duyarlı olduğundan ve doğru ifade için sol harmanlamaartığını.

dizebirleştirmeişleç harmanlama duyarlı, iki dize işlenen ve sonucu işlenen harmanlama etiketi harmanlama önceliği en yüksek olan atanır. UNION all ve büyük/küçük harf harmanlama duyarlı işleçlerdir ve tüm dize işlenen ve elde edilen sonuçlar işlenen harmanlama etiketi en yüksek önceliğe sahip atanır.Tüm işlenenleri ve sonuç BİRLİĞİ harmanlama önceliği sütun sütungöre değerlendirilir.

İşlevler ve harmanlama

HARMANLA cast ve convert işlevlerini harmanlama için önemli olan char, varchar, ve text veri türü.Giriş ve çıkış cast ve convert işlevlerini karakter dizeleri, çıkış dize giriş dize harmanlama etiketi bulunur.Giriş bir karakter dizeise, çıkış dize Coercible varsayılan ve bağlantı için geçerli veritabanı veya kullanıcı tanımlı işlev, saklı yordamveya tetikleyiciyi cast veya convert başvurulmaktadır içeren veritabanı harmanlama atanır.

Bir dize döndürür, ancak dize girişi olmayacağına yerleşik işlevler , dize sonuç Coercible varsayılan verilir ve geçerli veritabanı harmanlama veya kullanıcı tanımlı işlev, saklı yordamveya tetikleyici işlev başvurulan veritabanı harmanlama atanır.

harmanlamaaşağıdaki işlevleri olan-duyarlı ve kendi çýkýþ dizelerini harmanlama etiket giriş dizevardır:

CHARINDEX

REPLACE

FARK

TERS ÇEVİR

ISNUMERİC

RIGHT

LEFT

SOUNDEX

LEN

ŞEYLER

LOWER

SUBSTRING

PATINDEX

UPPER