ID do artigo: 316626 - Última revisão: quinta-feira, 16 de outubro de 2003 - Revisão: 3.2

INF: Como SQL Server compara seqüências com espaços à direita

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.

Nesta página

Expandir tudo | Recolher tudo

Sumário

SQL Server segue a especificação ANSI/ISO SQL - 92 (seção 8.2, < Comparação Predicado, > regras gerais nº 3) sobre como comparar cadeias de caracteres com espaços. O padrão ANSI requer preenchimento para o caractere seqüências usadas em comparações para que coincidam com seus comprimentos antes comparando-as. O preenchimento afeta diretamente a semântica de WHERE e HAVING cláusula predicados e outras comparações de seqüência de caracteres Transact-SQL. Por exemplo, o Transact-SQL considera as seqüências de caracteres' ABC ' e ' abc ' seja equivalente para a maioria das operações de comparação.

A única exceção a essa regra é o predicado LIKE. Quando o lado direito de uma expressão de predicado LIKE apresenta um valor com um espaço à direita, SQL Server não painel os dois valores para o mesmo comprimento antes que a comparação ocorra. Como o predicado LIKE, por definição, o objetivo é facilitar pesquisas padrão em vez de testes de igualdade de cadeia de caracteres simples, isso não violem a seção da especificação ANSI SQL-92 mencionada anteriormente.

Mais Informações

A configuração SET ANSI_PADDING não afeta se o SQL Server pads seqüências de caracteres antes de ele compara-los. SET ANSI_PADDING afeta somente se espaços em branco à direita serão arrumados de valores sendo inseridos em uma tabela, portanto, ela afeta armazenamento mas não as comparações.

A consulta a seguir ajuda a ilustrar ainda mais os conceitos explicados na seção "Sumário" deste artigo:
CREATE TABLE #tmp (c1 varchar(10))
GO
INSERT INTO #tmp VALUES ('abc ')
INSERT INTO #tmp VALUES ('abc')
GO
SELECT DATALENGTH(c1) as 'EqualWithSpace', * FROM #tmp WHERE c1 = 'abc '
SELECT DATALENGTH(c1) as 'EqualNoSpace  ', * FROM #tmp WHERE c1 = 'abc'
SELECT DATALENGTH(c1) as 'GTWithSpace   ', * FROM #tmp WHERE c1 > 'ab '
SELECT DATALENGTH(c1) as 'GTNoSpace     ', * FROM #tmp WHERE c1 > 'ab'
SELECT DATALENGTH(c1) as 'LTWithSpace   ', * FROM #tmp WHERE c1 < 'abd '
SELECT DATALENGTH(c1) as 'LTNoSpace     ', * FROM #tmp WHERE c1 < 'abd'
SELECT DATALENGTH(c1) as 'LikeWithSpace ', * FROM #tmp WHERE c1 LIKE 'abc %'
SELECT DATALENGTH(c1) as 'LikeNoSpace   ', * FROM #tmp WHERE c1 LIKE 'abc%'
GO
DROP TABLE #tmp
				

REFERÊNCIAS

Para obter informações adicionais sobre a configuração de ANSI_PADDING, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
154886  (http://support.microsoft.com/kb/154886/EN-US/ ) INF: Comportamento do ANSI_PADDING
231830  (http://support.microsoft.com/kb/231830/EN-US/ ) INF: Inserção de seqüências de caracteres contendo espaços à direita
Manuais online do SQL Server

Delaney, Kalen. dentro do Microsoft SQL Server 2000 . Microsoft Press, 2000. 370-Páginas 366.

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Palavras-chave: 
kbmt kbinfo KB316626 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: 316626  (http://support.microsoft.com/kb/316626/en-us/ )