Condividi tramite


= (confronto di stringhe o assegnazione)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse Analytics Platform System (PDW) in Microsoft Fabric Warehouse nel database SQL di Microsoft Fabric in Microsoft Fabric

Confronta due stringhe in una WHERE clausola o HAVING o imposta una variabile o una colonna con una stringa o il risultato di un'operazione di stringa sul lato destro dell'equazione. Ad esempio, se una variabile @x è uguale 'Adventure'a , WHERE @x = 'Adventure' confronta esattamente il valore originale di @x è uguale al valore 'Adventure' stringa. È anche possibile usare l'operatore = come operatore di assegnazione. Ad esempio, è possibile chiamare SET @a = 'AdventureWorks'.

Sintassi

expression = expression

Argomenti

expression

Specifica qualsiasi espressione valida di uno dei tipi di dati nella categoria di tipi di dati carattere e binario, ad eccezione dei tipi di dati image, ntext o text. È necessario che alle due espressioni sia applicato lo stesso tipo di dati oppure che un'espressione possa essere convertita in modo implicito nel tipo di dati dell'altra espressione.

Per confrontare o assegnare stringhe binarie e qualsiasi carattere tra le stringhe binarie, è necessario usare una conversione esplicita in dati di tipo carattere con CONVERTo CAST .

Osservazioni:

Il confronto tra stringhe tramite l'operatore = presuppone che entrambe le stringhe siano identiche. Per le opzioni di confronto di stringhe parziali, fare riferimento all'operatore LIKE o ai predicati full-text CONTAINS e CONTAINSTABLE .

Sql Server motore di database segue la specifica ANSI/ISO SQL-92 (sezione 8.2, predicato di confronto, regole generali n. 3) su come confrontare le stringhe con gli spazi. Lo standard ANSI richiede la spaziatura interna per le stringhe di caratteri usate nei confronti in modo che le lunghezze corrispondano prima di confrontarle. La spaziatura interna influisce direttamente sulla semantica dei predicati delle WHERE clausole e HAVING su altri confronti di stringhe Transact-SQL. Ad esempio, Transact-SQL considera le stringhe 'abc' e 'abc ' deve essere equivalente per la maggior parte delle operazioni di confronto. L'unica eccezione a questa regola è il predicato LIKE. Quando il lato destro di un'espressione LIKE di predicato include un valore con uno spazio finale, il motore di database non aggiunge i due valori alla stessa lunghezza prima che si verifichi il confronto. Poiché lo scopo del LIKE predicato, per definizione, è facilitare le ricerche di criteri anziché semplici test di uguaglianza di stringhe, questo predicato non viola la sezione della specifica ANSI SQL-92 menzionata in precedenza.

L'impostazione SET ANSI_PADDING non influisce sul fatto che la motore di database riquadri le stringhe prima di confrontarle. SET ANSI_PADDING influisce solo sul fatto che gli spazi vuoti finali vengano eliminati dai valori inseriti in una tabella, pertanto influisce sull'archiviazione ma non sui confronti.

Esempi

R. Confrontare le stringhe in una clausola WHERE

SELECT LastName,
    FirstName
FROM Person.Person
WHERE LastName = 'Johnson';

B. Confrontare le stringhe in una clausola WHERE usando la conversione dal file binario

DECLARE @LNameBin BINARY (100) = 0x5A68656E67;

SELECT LastName,
    FirstName
FROM Person.Person
WHERE LastName = CONVERT(VARCHAR, @LNameBin);

C. Assegnazione di stringhe a una variabile

In questo esempio viene illustrata una semplice assegnazione di dati stringa a una variabile usando l'operatore = .

DECLARE @dbname VARCHAR(100);

SET @dbname = 'Adventure';

D. Confronto tra stringhe e spazi

Le query seguenti illustrano il confronto tra stringhe in cui un lato contiene spazi e l'altro non:

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

Passaggi successivi