Makale numarası: 305704 - Son Gözden Geçirme: 03 Ekim 2003 Cuma - Gözden geçirme: 3.2

SORUN: Windows harmanlamalar tek tırnak ve tire sıralama yaparken Yoksay

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Belirtiler

SQL Server 2000, Microsoft Windows harmanlamaları ile depolanan verileri sıralar, tek bir tırnak (') veya bir kesme işareti (') ve tire (-) son kabul edilir. Bu davranış dikkate aşağıdaki örnek göstermek için:
CREATE TABLE t1(c1 VARCHAR(10) COLLATE Latin1_General_CI_AI)

INSERT INTO t1 VALUES ('car''s')
INSERT INTO t1 VALUES ('cars')
INSERT INTO t1 VALUES ('carps')
INSERT INTO t1 VALUES ('car-s')
GO
SELECT * FROM t1 ORDER BY c1 ASC
GO
				
çıktısı:
c1         
---------- 
carps
cars
car's
car-s

(4 row(s) affected)
				

Neden

Yalnızca normal alfabesi karakterleri karşılaştırılır sonra Windows harmanlamaları kullanmanız harmanlama karşılaştırmalar son olarak, bir tek tırnak (') veya tire (-) gibi karakterleri karşılaştırılır. Örneğin, SQL Server "araba ait" ve "otomobilleri" karşılaştırdığında, önce SQL Server alfabe karakterleri karşılaştırılmaktadır:

"otomobiller ve"otomobilleri"

Bu iki eşit olduğundan, noktalama işareti karakteri (') Karşılaştırmada dahil edilir. Ilk dize, ikinci dizeyi sağlamaz; oysa noktalama karakterleri içeriyor. Bu nedenle, "araba ait" "otomobilleri" büyüktür. Benzer şekilde, "carps" büyüktür "araba ait" ancak normal alfabesi karakterleri farklı olduğundan burada SQL Server noktalama işareti karakterini tüm hesap değil:

"carps" büyüktür "otomobilleri"

Bu davranış Microsoft Windows NT "sözcüğü sıralama" karşılaştırma yordam aynıdır ve tasarım gereğidir.

Pratik Çözüm

Bu davranışa geçici bir çözüm bulmak için <a0></a0>, bir ikili karşılaştırma Harmanlaması'nı kullanın. Örneğin, harmanlama Latin1_General_Bin kullanın. Sonra ORDER BY yan tümcesinde, alan KÜÇÜKHARF veya BÜYÜKHARF işlevinde alın. KÜÇÜKHARF veya BÜYÜKHARF işlevinin bir ikili/sözlük alfabetik sırayla karakter, kesme işareti ve tire karakterler harf sonuç kümesinde koruyarak sıralaması sağlar.

Örneğin:
CREATE TABLE t1 (c1 varchar (10) COLLATE Latin1_General_Bin NULL )
GO
INSERT INTO t1 VALUES ('CARs')
INSERT INTO t1 VALUES ('car''s')
INSERT INTO t1 VALUES ('carps')
GO
SELECT * FROM t1 ORDER BY LOWER(c1) ASC
				
burada olan çıkış:
c1         
---------- 
car's
car-s
cars
CARs

(4 row(s) affected)
				

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2000 Standard Edition
Anahtar Kelimeler: 
kbmt kbprb KB305704 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:305704  (http://support.microsoft.com/kb/305704/en-us/ )