Artigo: 316626 - Última revisão: quinta-feira, 16 de Outubro de 2003 - Revisão: 3.2

INF: Como o SQL Server compara o cadeias 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 | Reduzir tudo

Sumário

SQL Server segue a especificação ANSI/ISO SQL - 92 (secção 8.2, < Comparação Predicado >, a regras gerais n.º3) sobre como comparar as cadeias com espaços. O padrão ANSI requer o preenchimento para o carácter cadeias utilizadas em comparações de modo a que os comprimentos de correspondam antes de comparar os. O preenchimento afecta directamente a semântica de WHERE e HAVING cláusula predicados e outras comparações de cadeias Transact-SQL. Por exemplo, o Transact-SQL considera as cadeias ABC ' e ' abc ' seja equivalente para a maior parte das operações de comparação.

A única excepção a esta regra é o predicado LIKE. Ao lado direito de uma expressão predicado LIKE apresenta um valor com um espaço adjacente, SQL Server não painel dois valores para o mesmo comprimento antes de ocorre a comparação. Uma vez que o predicado LIKE, por definição, o objectivo é facilitar procuras padrão em vez de testes de igualdade cadeia simples, esta não violar a secção da especificação ANSI SQL-92 mencionada anteriormente.

Mais Informação

A definição de SET ANSI_PADDING não afecta se o SQL Server pads cadeias antes de que compara-os. SET ANSI_PADDING afecta apenas se espaços em branco no fim são cortados dos valores a ser inseridos numa tabela, por isso afecta armazenamento mas não as comparações.

A seguinte consulta ajuda-o para ilustrar ainda mais os conceitos explicados na secçã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 definição ANSI_PADDING, clique números de artigo existentes abaixo para visualizar 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 cadeias com espaços de final
Livros online do SQL Server

Delaney, Kalen. no Microsoft SQL Server 2000 . A Microsoft Press, 2000. Páginas 366-370.

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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )