= (Zeichenfolgenvergleich oder Zuweisung)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL-Analyseendpunkt in Microsoft Fabric Warehouse in Microsoft Fabric SQL-Datenbank in Microsoft Fabric
Vergleicht zwei Zeichenfolgen in einer WHERE
- oder HAVING
-Klausel oder legt eine Variable oder Spalte auf die Zeichenfolge oder das Ergebnis eines Zeichenfolgenvorgangs auf der rechten Seite der Gleichung fest. Wenn beispielsweise die Variable @x
gleich 'Adventure'
ist, vergleicht WHERE @x = 'Adventure'
, ob der ursprüngliche Wert von @x
identisch mit dem Zeichenfolgenwert 'Adventure'
ist. Sie können den =
-Operator auch als Zuweisungsoperator verwenden. Beispielsweise können Sie SET @a = 'AdventureWorks'
aufrufen.
Syntax
expression = expression
Argumente
expression
Gibt einen beliebigen gültigen Ausdruck aus der binären Datentypkategorie oder der Datentypkategorie der Zeichen an, mit Ausnahme der Datentypen image, ntext oder text. Beide Ausdrücke müssen denselben Datentyp haben, oder es muss möglich sein, einen Ausdruck implizit in den Datentyp des anderen Ausdrucks zu konvertieren.
Beim Vergleichen oder Zuweisen binärer Zeichenfolgen und Zeichen zwischen den binären Zeichenfolgen muss mit CONVERT
oder CAST
eine explizite Konvertierung in Zeichendaten erfolgen.
Bemerkungen
Beim Zeichenfolgenvergleich mit dem =
-Operator wird davon ausgegangen, dass beide Zeichenfolgen identisch sind. Informationen zum Vergleichen von partiellen Zeichenfolgen finden Sie unter dem LIKE-Operator oder in den Volltextprädikaten CONTAINS und CONTAINSTABLE.
Die SQL Server-Datenbank-Engine folgt der ANSI/ISO-SQL-92-Spezifikation (Abschnitt 8.2, Vergleichsprädikat, Allgemeine Regeln 3) zum Vergleich von Zeichenfolgen mit Leerzeichen. Der ANSI-Standard erfordert eine Auffüllung der Zeichenfolgen, die in Vergleichen verwendet werden, damit ihre Längen übereinstimmen, bevor sie verglichen werden. Die Auffüllung wirkt sich direkt auf die Semantik der Prädikate in der WHERE
- und der HAVING
-Klausel und auf andere Transact-SQL-Zeichenfolgenvergleiche aus. Transact-SQL betrachtet beispielsweise die Zeichenfolgen 'abc'
und 'abc '
bei den meisten Vergleichsvorgängen als identisch. Die einzige Ausnahme von dieser Regel bildet das LIKE-Prädikat. Wenn die rechte Seite eines LIKE
-Prädikatausdrucks einen Wert mit einem nachfolgenden Leerzeichen enthält, füllt die Datenbank-Engine die beiden Werte vor dem Vergleich nicht auf dieselbe Länge auf. Da der Zweck des LIKE
-Prädikats per Definition in Mustersuchen anstelle einfacher Tests auf Zeichenfolgengleichheit besteht, verletzt dieses Prädikat nicht den Abschnitt der oben erwähnten ANSI-SQL-92-Spezifikation.
Die SET ANSI_PADDING
-Einstellung wirkt sich nicht darauf aus, ob die Datenbank-Engine Zeichenfolgen vor dem Vergleich auffüllt. SET ANSI_PADDING
wirkt sich nur darauf aus, ob nachfolgende Leerzeichen von Werten, die in eine Tabelle eingefügt werden, gekürzt werden. Diese Option hat also Auswirkungen auf den Speicher, aber nicht auf Vergleiche.
Beispiele
A. Vergleichen von Zeichenfolgen in einer WHERE-Klausel
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = 'Johnson';
B. Vergleichen von Zeichenfolgen in einer WHERE-Klausel mithilfe der Konvertierung aus dem Binärformat
DECLARE @LNameBin BINARY (100) = 0x5A68656E67;
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName = CONVERT(VARCHAR, @LNameBin);
C. Zuweisen von Zeichenfolgen zu einer Variable
Dieses Beispiel veranschaulicht eine einfache Zuweisung von Zeichenfolgendaten zu einer Variablen mithilfe des =-Operators.
DECLARE @dbname VARCHAR(100);
SET @dbname = 'Adventure';
D: Vergleichen von Zeichenfolgen mit Leerzeichen
Die folgenden Abfragen veranschaulichen den Vergleich zwischen Zeichenfolgen, bei denen eine Seite Leerzeichen enthält und die andere nicht:
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