Partilhar via


= (Comparação ou atribuição de cadeias de caracteres)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase 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

Próximos passos