Dela via


= (Strängjämförelse eller tilldelning)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Förhandsversion av Microsoft Fabric

Jämför två strängar i en WHERE eller HAVING -sats eller anger en variabel eller kolumn till sträng eller resultat av en strängåtgärd till höger i ekvationen. Om en variabel @x till exempel är WHERE @x = 'Adventure''Adventure'lika med jämförs det ursprungliga värdet för @x med strängvärdet 'Adventure' exakt. Du kan också använda operatorn = som tilldelningsoperator. Du kan till exempel anropa SET @a = 'AdventureWorks'.

Syntax

expression = expression

Arguments

expression

Anger ett giltigt uttryck för någon av datatyperna i kategorin tecken och binär datatyp, förutom datatyperna bild, ntext eller text . Båda uttrycken måste ha samma datatyp, eller så måste ett uttryck kunna konverteras implicit till datatypen för det andra uttrycket.

En explicit konvertering till teckendata med CONVERT, eller CAST måste användas när du jämför eller tilldelar binära strängar och eventuella tecken mellan de binära strängarna.

Remarks

Strängjämförelse med operatorn = förutsätter att båda strängarna är identiska. För alternativ för partiell strängjämförelse, se like-operatorn eller contains- och CONTAINSTABLE-predikaten för fulltext.

SQL Server Database Engine följer ANSI/ISO SQL-92-specifikationen (avsnitt 8.2, Jämförelsepredikat, Allmänna regler nr 3) om hur du jämför strängar med blanksteg. ANSI-standarden kräver utfyllnad för de teckensträngar som används i jämförelser så att deras längder matchar innan de jämförs. Utfyllnad påverkar direkt semantiken WHERE för och HAVING satspredikat och andra Transact-SQL strängjämförelser. Till exempel anser Transact-SQL att strängarna 'abc' och 'abc ' är likvärdiga för de flesta jämförelseåtgärder. Det enda undantaget till den här regeln är LIKE-predikatet. När höger sida av ett LIKE predikatuttryck har ett värde med ett avslutande blanksteg, fyller databasmotorn inte de två värdena i samma längd innan jämförelsen sker. Eftersom syftet med predikatet LIKE per definition är att underlätta mönstersökningar snarare än enkla strängjämlikhetstester, bryter detta predikat inte mot avsnittet i ANSI SQL-92-specifikationen som nämndes tidigare.

Inställningen SET ANSI_PADDING påverkar inte om databasmotorn fyller på strängar innan den jämför dem. SET ANSI_PADDING påverkar endast om avslutande tomma värden trimmas från värden som infogas i en tabell, så det påverkar lagring men inte jämförelser.

Examples

A. Jämför strängar i en WHERE-sats

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

B. Jämför strängar i en WHERE-sats med konvertering från binär fil

DECLARE @LNameBin BINARY (100) = 0x5A68656E67;

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

C. Strängtilldelning till en variabel

Det här exemplet illustrerar en enkel tilldelning av strängdata till en variabel med operatorn = .

DECLARE @dbname VARCHAR(100);

SET @dbname = 'Adventure';

D. Strängjämförelse med blanksteg

Följande frågor illustrerar jämförelsen mellan strängar där den ena sidan innehåller blanksteg och den andra inte:

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

Next steps