Harmanlama önceliği (Transact-sql)

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

  • Bir karakter dizesindeki değerlendirilen bir ifade sonucunu harmanlama.

  • Karakter dize girdileri kullanın ancak gibi gibi bir karakter dizesini döndürür harmanlama duyarlı işleçleri tarafından kullanılan harmanlamayı ve In.

Harmanlama öncelik kuralları yalnızca karakter dizesi veri türleri için geçerlidir: char, varchar, text, nchar, nvarchar, ve ntext. Diğer veri türlerine sahip nesne harmanlama değerlendirme içinde katılmayın.

Harmanlama etiketleri

Aşağıdaki tabloda, listeler ve açıklar dört kategoride olan tüm nesneleri alfabe tanımlanır. Her kategorinin adını harmanlama etiket adı verilir.

Harmanlama etiketi

Nesne türleri

Coercible varsayılan

Herhangi bir Transact-SQLkarakter dize değişkeni, parametre, hazır bilgi ya da Katalog yerleşik bir işlevi veya dize girdileri üretir ama bir dize çıktısını almaz yerleşik bir işlev çıktı.

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

Örtülü x

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

Sütun açıkça create table veya create VIEW deyimi collate yan tümcesini kullanarak bir harmanlama atandı bile, sütun başvurusu örtük olarak sınıflandırılır.

Açık x

Belirli bir harmanlama (x) deyimde collate yan tümcesini kullanarak açıkça artığını ifade.

Hayır harmanlama

Bir ifadenin değeri örtülü harmanlama etiket çakışan alfabe olan iki dizge arasındaki bir operasyon sonucu olduğunu gösterir. İfade sonucu bir harmanlama sahip değil olarak tanımlanır.

Harmanlama kuralları

Başvurulan nesnenin harmanlama etiketi yalnızca bir karakter dizesi nesne başvuran basit ifade harmanlama etikettir.

İşlenen ifadeler harmanlama etiketi iki işlenen ifadelerle aynı harmanlama etiket başvuran karmaşık ifade harmanlama etikettir.

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

  • Açık öncelik örtülü devraldı. 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 harmanlama sonucunu verir:

    Örtülü x + örtülü y Hayır harmanlama =

  • Hayır harmanlama sahip bir ifade bir ifade belirtik harmanlama dışında herhangi bir etiket ile birleştirerek (bakınız aşağıdaki kural), Hayır harmanlama etiketi olan bir sonuç verir:

    Hayır harmanlama + şey Hayır harmanlama =

  • Hayır harmanlama sahip bir ifade belirtik harmanlama sahip bir ifade ile birleştiren bir ifade ile açık bir etiket verir:

    Hayır harmanlama + açık x = açık

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

Işlenen coercion etiketi

Açık x

Örtülü x

Coercible varsayılan

Hayır 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

Hayır harmanlama sonucudur

Örtülü y sonucudur

Hayır harmanlama sonucudur

Coercible varsayılan

Açık x sonucudur

Örtülü x sonucudur

Sonucudur Coercible varsayılan

Hayır harmanlama sonucudur

Hayır harmanlama

Açık x sonucudur

Hayır harmanlama sonucudur

Hayır harmanlama sonucudur

Hayır harmanlama sonucudur

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

  • Birden fazla collate yan tümceleri açık bir ifade olan bir deyim olamaz. Örneğin, aşağıdaki WHEREyan tümce geçerli değil çünkü bir COLLATEyan tümcesi belirtilen zaten açık bir ifade olduğunu ifade için:

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

  • Kod sayfası dönüştürme işlemleri için textveri türleri verilmez. Cast edemez bir textbir harmanlama ifade diğerine farklı kod sayfaları varsa. Farklı kod sayfası daha metnin sol işlenenin sağ metin işlenen harmanlama sahip olduğunda değerleri atama işleci atayamazsınız.

Veri türü dönüştürme sonra harmanlama önceliği belirler. Ortaya çıkan harmanlama alındığı işlenen Özet sonuç veri türü işlenen farklı olabilir. Örneğin, aşağıdaki toplu 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'

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'veri türü önceliği yüksek. Bu nedenle, sonuçta elde edilen deyim atanan Unicode veri türüne sahip N'abc'. Ancak, ifade CharCol, dolaylı, harmanlama etiketi varsa ve N'abc'Coercible varsayılan bir düşük baskı etiket vardır. Bu nedenle, kullanılan harmanlama olduğunu French_CI_ASharmanlama CharCol.

Harmanlama kural örnekleri

Aşağıdaki örnekler, harmanlama kuralları nasıl çalıştığını 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

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 vardır ve bir hata üretir.

SELECT * 
FROM TestTab 
WHERE GreekCol = LatinCol;

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.

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.

Açık etiket vs.Örtülü etiket

Aşağıdaki sorgu yüklemi harmanlama değerlendirilen greek_ci_asçünkü doğru ifade açık etiketi. Bu sol ifade örtük etiketi üzerinde öncelik kazanır.

SELECT * 
FROM TestTab 
WHERE GreekCol = LatinCol COLLATE greek_ci_as;

SELECT * 
FROM TestTab 
WHERE GreekCol = LatinCol COLLATE greek_ci_as;

Sonuç kümesi buradadır.

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

(1 row affected)

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

(1 row affected)

Hayır harmanlama etiketleri

CASEAşağıdaki sorgulardaki deyimler var hayır harmanlama etiket; Bu nedenle, seçim listesinde bulunamaz veya harmanlama duyarlı işleçleri tarafından işletilmektedir. Ancak, ifadeleri üzerinde harmanlama duyarlı işleçleri tarafından çalıştırılabilir.

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

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.

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;

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.

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;

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)

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

(1 row affected)

Harmanlama duyarlı ve harmanlama duyarlı

Ya da harmanlama duyarlı veya büyük küçük harf duyarlı işleçleri ve işlevleri vardır.

  • Harmanlama duyarlı
    Bu bir Hayır harmanlama işlenen belirtme bir derleme zamanı hatası olduğu anlamına gelir. Hayır harmanlama ifade sonucu olamaz.

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

Operatörleri ve harmanlama

Karşılaştırma işleçleri ve max, MIN, arasında benzer ve operatörleri, harmanlama duyarlı vardır. Operatörleri tarafından kullanılan dize önceliğinden işlenen harmanlama etiket atanır. UNION işleci de harmanlama duyarlı ve tüm dize işlenen ve nihai sonucu işlenen harmanlama önceliği en yüksek atanır. Harmanlama önceliği Birliği işlenen ve sonuç değerlendirilir sütun temelinde.

Atama işleci harmanlama duyarlı olduğunu ve doğru ifade sol harmanlama artığını.

Dize Bitiştirme işleç harmanlama duyarlı, iki dize işlenen ve sonucu işlenen harmanlama etiketi harmanlama önceliği en yüksek atanır olduğunu. UNION all ve case büyük küçük harf duyarlı harmanlamayı işleçlerdir ve tüm dize işlenen ve nihai sonuçları işlenen harmanlama etiketi en yüksek önceliğe sahip atanır. Bütün işleçler ve sonuç Birliği harmanlama önceliği sütun sütununa göre değerlendirilir.

İşlevler ve harmanlama

Harmanlama duyarlı için cast ve convert collate işlevlerdir char, varchar, ve textveri türlerini. Giriş ve çıkış cast ve convert işlevlerini karakter dizeleri, çıktı dizgesi dizge harmanlama etiketi vardır. Giriş bir karakter dizesi ise, çıkış dizesi Coercible varsayılan olduğunu ve bağlantı için geçerli veritabanı veya kullanıcı tanımlı bir işlev, saklı yordam veya tetikleyiciyi içinde cast veya convert başvurulan içeren veritabanı harmanlama atanır.

Yerleşik işlevleri için bir dize döndürür ama geçerli veritabanı harmanlama veya kullanıcı tanımlı bir işlev, saklı yordam bulunduğu veritabanı harmanlama atanan sonuç dizesini bir dize girişi Coercible varsayılan ve almaz mı veya tetikleyici işlevi başvurulmaktadır.

Aşağıdaki işlevler harmanlama duyarlı ve onların çıktı dizeleri giriş dizesi harmanlama etiketi:

CHARINDEX

REPLACE

FARK

TERS ÇEVİR

ISNUMERİC

RIGHT

LEFT

SOUNDEX

LEN

MALZEME

LOWER

SUBSTRING

PATINDEX

UPPER

Ayrıca bkz.

Başvuru

HARMANLAMA (Transact-sql)

İşleçler (Transact-sql)

Ifadeler (Transact-sql)

Kavramlar

Veri türü dönüştürme (veritabanı altyapısı)