ID do artigo: 305704 - Última revisão: sexta-feira, 3 de outubro de 2003 - Revisão: 3.2

PROBLEMA: Windows agrupamentos ignorar uma citação e o hífen ao pedido

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sintomas

Uma aspa simples (') ou um apóstrofo (') e hífen (-) são considerados pela última vez quando o SQL Server 2000 classifica dados armazenados com agrupamentos do Microsoft Windows. Para ilustrar esse comportamento, considere o exemplo a seguir:
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
				
o resultado é:
c1         
---------- 
carps
cars
car's
car-s

(4 row(s) affected)
				

Causa

Em comparações de agrupamento usam agrupamentos do Windows, os caracteres como uma aspa simples (') ou um hífen (-) são comparados por último, somente depois que os caracteres do alfabeto regulares são comparados. Por exemplo, quando o SQL Server compara "do carro" e "carros", o SQL Server compara os caracteres do alfabeto primeiro:

"carros e"carros"

Como esses dois são iguais, o caractere de pontuação (') está incluído na comparação. A primeira seqüência de caracteres contém caracteres de pontuação, enquanto a segunda seqüência de caracteres não. Assim, "carro" é maior que "carros". Da mesma forma, "carro" é maior que "carps" mas aqui SQL Server não leva em conta o caractere de pontuação em todos os porque os caracteres do alfabeto regular já são diferentes:

"carros" são maiores que "carps"

Esse comportamento é o mesmo que a rotina de comparação de "classificação de palavra" no Windows NT e é por design.

Como Contornar

Para contornar esse comportamento, use um agrupamento de comparação binária. Por exemplo, use agrupamento Latin1_General_Bin. Em seguida, na cláusula ORDER BY quebre o campo a função maiúscula ou minúscula. O uso da função maiúscula ou minúscula permite uma ordem binário dos caracteres apóstrofo e hífen em uma ordem alfabética/dicionário de caracteres, mantendo diferenciar maiúsculas de minúsculas no conjunto de resultados.

Por exemplo:
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
				
aqui é a saída:
c1         
---------- 
car's
car-s
cars
CARs

(4 row(s) affected)
				

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
Palavras-chave: 
kbmt kbprb KB305704 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 305704  (http://support.microsoft.com/kb/305704/en-us/ )