Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de Dados SQL no Microsoft Fabric
Compara duas cadeias de caracteres em uma WHERE cláusula ou HAVING ou define uma variável ou coluna como cadeia de caracteres ou resultado de uma operação de cadeia de caracteres no lado direito da equação. Por exemplo, se uma variável @x for 'Adventure'igual a , então WHERE @x = 'Adventure' compara o valor original de é igual ao valor @x da cadeia de 'Adventure' caracteres exatamente. Além disso, você pode usar o = operador como um operador de atribuição. Por exemplo, você pode chamar SET @a = 'AdventureWorks'.
Syntax
expression = expression
Arguments
expression
Especifica qualquer expressão válida de qualquer um dos tipos de dados na categoria de tipo de dados binário e de caractere, exceto os tipos de dados image, ntext ou text . Ambas as expressões devem ser do mesmo tipo de dados, ou uma expressão deve ser capaz de ser implicitamente convertida para o tipo de dados da outra expressão.
Uma conversão explícita em dados de caracteres com CONVERT, ou CAST deve ser usada ao comparar ou atribuir cadeias binárias e quaisquer caracteres entre as cadeias binárias.
Remarks
A comparação de cadeias de caracteres usando o = operador pressupõe que ambas as cadeias de caracteres são idênticas. Para opções de comparação parcial de cadeias de caracteres, consulte o operador LIKE ou os predicados de texto completo CONTAINS e CONTAINSTABLE .
O Mecanismo de Banco de Dados do SQL Server segue a especificação ANSI/ISO SQL-92 (Seção 8.2, Predicado de comparação, Regras gerais #3) sobre como comparar cadeias de caracteres com espaços. O padrão ANSI requer preenchimento para as cadeias de caracteres usadas em comparações para que seus comprimentos correspondam antes de compará-los. O preenchimento afeta diretamente a semântica e WHERE os predicados de cláusula e outras comparações de cadeia de HAVING caracteres Transact-SQL. Por exemplo, Transact-SQL considera as cadeias de 'abc' caracteres e 'abc ' como equivalentes para a maioria das operações de comparação. A única exceção a esta regra é o predicado LIKE. Quando o lado direito de uma LIKE expressão de predicado apresenta um valor com um espaço à direita, o Mecanismo de Banco de Dados não coloca os dois valores no mesmo comprimento antes que a comparação ocorra. Como o objetivo do predicado, por definição, é facilitar pesquisas de LIKE padrão em vez de simples testes de igualdade de cadeia de caracteres, esse predicado não viola a seção da especificação ANSI SQL-92 mencionada anteriormente.
A SET ANSI_PADDING configuração não afeta se o Mecanismo de Banco de Dados armazena cadeias de caracteres antes de compará-las.
SET ANSI_PADDING afeta apenas se os espaços em branco à direita são cortados dos valores que estão sendo inseridos em uma tabela, portanto, afeta o armazenamento, mas não as comparações.
Examples
A. Comparar cadeias de caracteres em uma cláusula WHERE
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = 'Johnson';
B. Comparar cadeias de caracteres em uma cláusula WHERE usando a conversão de binário
DECLARE @LNameBin BINARY (100) = 0x5A68656E67;
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = CONVERT(VARCHAR, @LNameBin);
C. Atribuição de cadeia de caracteres a uma variável
Este exemplo ilustra uma atribuição simples de dados de cadeia de caracteres a uma variável usando o operador =.
DECLARE @dbname VARCHAR(100);
SET @dbname = 'Adventure';
D. Comparação de cadeias de caracteres com espaços
As consultas a seguir ilustram a comparação entre cadeias de caracteres em que um lado contém espaços e o outro não:
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;
GO