Harmanlama önceliği (Transact-SQL)

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

  • Bir karakter değerlendirildiği bir ifade sonucunu, harmanlama dize.

  • Karakter kullanan harmanlama duyarlı işleçleri tarafından kullanılan harmanlamayı girdileri dize, ancak bir karakter dizesini (örneğin, LIKE dönmek ve IN.

Yalnızca karakter harmanlama öncelik kuralları uygulamak dize veri türleri: char, varchar, text, nchar, nvarchar, ve ntext. Diğer veri türlerine sahip nesne harmanlama değerlendirmeleri yer.

Harmanlama-etiketler

Aşağıdaki tablo listeler ve alfabe tüm nesnelerin tanımlanmış dört kategorileri açıklar.Her kategorinin adını harmanlama etiket olarak adlandırılır.

Harmanlama etiketi

Nesne türleri

Coercible-varsayılan

Tüm Transact-SQL karakter dize değişkeni, parametre, hazır bilgi veya katalog yerleşik bir işlev veya dize girdileri almaz, ancak dize bir çıktı üretir, yerleşik bir işlev çıktı.

Nesne, bir kullanıcı tanımlı işlevin, saklı yordam veya tetikleyiciyi bildirilirse, nesne, işlev, saklı yordam veya tetikleyiciyi oluşturulduğu veritabanının varsayılan harmanlama atanır.Nesne, nesnenin toplu iş iş işlemde bildirilirse, bağlantı için geçerli veritabanının varsayılan harmanlama atanır.

Örtülü X

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

Sütun açıkça bir harmanlama bir COLLATE kullanılarak atandı bile yan tümce CREATE tablo veya CREATE VIEW deyim sütun başvurusunu Kapalı'olarak sınıflandırılır.

Açık X

Bir ifade, açıkça belirli bir harmanlama (X) bir COLLATE yan tümcesini kullanarak artığını ifade.

No-harmanlama

Belirten değeri bir ifade arasında çakışan alfabe düzenlerinden örtülü harmanlama etiketin olan iki dizeyi bir işlem sonucudur.ifade Sonucu bir harmanlama sahip değil olarak tanımlanır.

Harmanlama kuralları

Yalnızca bir karakter başvuran bir basit ifade harmanlama etiketini dize nesne başvurulan nesne harmanlama etiketidir.

Işlenen deyimleri harmanlama etiketini, iki işlenen deyimleri aynı harmanlama etiketi başvuran karmaşık ifade harmanlama etikettir.

Farklı alfabe ile iki işlenen deyimleri başvuran karmaşık ifade sonucunu harmanlama etiketinin üzerinde aşağıdaki kurallara dayanır:

  • Doğrudan örtülü önceliklidir.Dolaylı Coercible varsayılan üzerinde önceliğe sahiptir:

    Açık > Kapalı > Coercible-varsayılan

  • Farklı alfabe düzenlerinden atanan iki explicit deyimi birleştiren bir hata üretir:

    Açık X + açık Y hatası =

  • Farklı alfabe düzenlerinden olan iki örtülü ifade birleştirme No harmanlama sonucunu verir:

    Örtülü X + örtülü Y No harmanlama =

  • Birleştirme bir ifade No alfabe düzeni ile birlikte bir ifade açık harmanlama dışında bir etiket No harmanlama etiketi içeren bir sonuç (aşağıdaki kural bakın) üretir:

    No-harmanlama + herhangi bir şey yok harmanlama =

  • Bir ifade ile açık bir alfabe düzeni olan bir deyim No harmanlama ile birleştirerek, bir ifade ile açık olan bir etiket verir:

    No-harmanlama'nin + açık X açık =

Aşağıdaki tablo kuralları özetler.

Işlenen zorlama etiketi

Açık X

Örtülü X

Coercible-varsayılan

No-harmanlama

Açık bir Y

Hata üretir.

Açık bir Y oluşur

Açık bir Y oluşur

Açık bir Y oluşur

Örtülü Y

Sonuç açık X olur.

Sonuç No harmanlama olur.

Sonuç örtülü Y olur.

Sonuç No harmanlama olur.

Coercible-varsayılan

Sonuç açık X olur.

Sonuç örtülü X olur.

Sonuç Coercible varsayılan olur.

Sonuç No harmanlama olur.

No-harmanlama

Sonuç açık X olur.

Sonuç No harmanlama olur.

Sonuç No harmanlama olur.

Sonuç No harmanlama olur.

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

  • Birden çok COLLATE yan tümcesini, açık bir ifade olan bir deyim bulunamaz.Örneğin, aşağıdaki WHERE yan tümce geçerli değil çünkü bir COLLATE yan tümcesi, açık bir ifade olan bir ifade belirtilir:

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

  • Kod sayfa dönüştürme için text veri türleri bulunamaz. Atama edemiyor bir text ifade başka if için bir harmanlama'den farklı kod sayfaları sahip oldukları. Atama işleç, Harmanlama, işlenenin sağ metin sola metin işleneni'den farklı bir kod sayfa olduğunda değerleri atayamazsınız.

Veri türü dönüştürme sonra harmanlama öncelik belirlenir.Sonuçta elde edilen harmanlama alındığı işlenen veri türü son sonuç sağlayan işlenen farklı olabilir.Örneğin, aşağıdaki toplu iş iş iş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'

Basit ifade Unicode veri türü N'abc' daha yüksek bir veri türüne göre önceliğe sahiptir. Bu nedenle, sonuçta elde edilen ifade atanan Unicode veri türü vardır. N'abc'. Bununla birlikte, ifade CharCol Dolaylı, harmanlama etiketi varsa ve N'abc' bir alt Coercible varsayılan zorlama etiketi vardır. Bu nedenle, kullanılan alfabe düzeni olan French_CI_AS harmanlama CharCol.

Harmanlama kural örnekleri

Aşağıdaki örnekler, harmanlama kuralları çalışma şeklini gösterir.Örnekleri çalıştırmak için aşağıdaki sınama tablosu oluş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 sorguda yüklemi harmanlama çakışması vardır ve bir hata üretir.

SELECT * 
FROM TestTab 
WHERE GreekCol = LatinCol;

Here is the result set.

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 ve açık.Örtülü etiketi

Harmanlama değerlendirildiği yüklemi aşağıdaki sorguda greek_ci_as sağ ifade belirtik bir etiketi olduğundan. Bu örtülü etiketini sola üzerinde önceliğe ifade.

SELECT * 
FROM TestTab 
WHERE GreekCol = LatinCol COLLATE greek_ci_as;

Here is the result set.

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

(1 row affected)

No-harmanlama etiketleri

The CASE expressions in the following queries have a No-harmanlama label; therefore, they cannot appear in the select list or be operated on by harmanlama-sensitive operators. Ancak, ifadeler, büyük/küçük harmanlama-duyarlı işleçleri tarafından işletilen.

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

Here is the result set.

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;

Here is the result set.

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;

Here is the result set.

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

(1 row affected)

Harmanlama duyarlı ve büyük küçük harf duyarlı harmanlama

Işleçler ve işlevlerin ya da küçük harf duyarlı veya büyük küçük harf duyarlı harmanlama var.

  • harmanlama duyarlı
    Bu, bir No-harmanlama işlenen belirten bir derleme hatası olduğu anlamına gelir.Ifadenin sonucu yok harmanlama olamaz.

  • Büyük küçük harf duyarlı alfabe düzeni
    Bu, işlenen ve sonuç No harmanlama olabileceği anlamına gelir.

Işleçler ve harmanlama

harmanlama işleçlerini ve MAX, MIN, BETWEEN, LIKE ve işleçler'ıN küçük harf duyarlı harmanlama ' dir.Daha yüksek öncelik olan işlenen harmanlama etiketini atanmış işleçleri tarafından kullanılan dize.BIRLEŞIM işlecini aynı zamanda duyarlı alfabe düzeni tüm dize işlenenleri ise ve Nihai sonuç, işlenen, harmanlama en yüksek önceliğe sahip atanır.UNION işlenenleri ve sonuç harmanlama önceliği değerlendirildiği sütundaki sütun.

Atama işleç büyük küçük harf duyarlı harmanlama; sağ ifade için sol harmanlama artığını.

Dize birleştirme işleç büyük küçük harf işlenen harmanlama etiketini harmanlama önceliği en yüksek olan iki dize işlenenleri ve sonucu atanmış duyarlı harmanlamayı ' dir.UNION ALL ve durum işleçleri büyük küçük durum duyarlı harmanlamayı; tüm dize işlenenleri ve son sonuçlar işlenen harmanlama etiketinin en yüksek önceliğe sahip atanır.Tüm işlenenleri ve sonuç UNION harmanlama önceliğini sütun sütuna göre değerlendirilecektir.

Işlevler ve harmanlama

CAST CONVERT ve COLLATE işlevleri harmanlama için önemli olan char, varchar, ve text veri türleri. Giriş ve çıkış CAST ve CONVERT işlev karakter dize s, çıktı, dize giriş harmanlama etiket dize.Giriş bir karakter değil, dize, çıktı dize Coercible varsayılan, geçerli veritabanı için bir bağlantı veya kullanıcı tanımlı fonksiyon, saklı yordam veya tetikleyiciyi CAST veya CONVERT başvurulmaktadır içeren veritabanı harmanlama atanmış.

Yerleşik işlevler için bir dize ancak sonuç dizesini bir dize girişi Coercible varsayılan ve alma, geçerli veritabanı harmanlama veya kullanıcı tanımlı fonksiyonu, saklı bir yordam içeren veritabanı harmanlama atanmış yapın veya işlev başvurulmaktadır tetikler.

Aşağıdaki işlevler harmanlama duyarlı ve kendi çıkış dizeleri giriş dizenin alfabe düzeni etiketi:

charindex

REPLACE

FARK

TERS KAYDET

isnumeric

RIGHT

LEFT

soundex

UZUNLUĞU

ÖĞE

LOWER

SUBSTRING

patindex

UPPER