Udostępnij za pomocą


= (Porównanie ciągów lub przypisanie)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Porównuje dwa ciągi w klauzuli WHERE or HAVING lub ustawia zmienną lub kolumnę na ciąg lub wynik operacji ciągu po prawej stronie równania. Jeśli na przykład zmienna @x jest równa , 'Adventure' porównuje WHERE @x = 'Adventure'oryginalną wartość @x jest równa wartości 'Adventure' ciągu dokładnie. Możesz również użyć = operatora jako operatora przypisania. Możesz na przykład wywołać metodę SET @a = 'AdventureWorks'.

Syntax

expression = expression

Arguments

expression

Określa dowolne prawidłowe wyrażenie dowolnego z typów danych w kategorii znaków i binarnych typów danych, z wyjątkiem obrazów, ntekstów lub typów danych tekstowych . Oba wyrażenia muszą być tego samego typu danych lub jedno wyrażenie musi być niejawnie konwertowane na typ danych drugiego wyrażenia.

Jawna konwersja na dane znaków za pomocą CONVERTmetody lub CAST musi być używana podczas porównywania lub przypisywania ciągów binarnych i dowolnych znaków między ciągami binarnymi.

Remarks

Porównanie ciągów przy użyciu = operatora zakłada, że oba ciągi są identyczne. W przypadku opcji porównania ciągów częściowych zapoznaj się z operatorem LIKE lub predykatami pełnotekstowymi CONTAINS i CONTAINSTABLE .

Aparat bazy danych programu SQL Server jest zgodny ze specyfikacją ANSI/ISO SQL-92 (sekcja 8.2, predykat porównawczy, ogólne reguły nr 3) na temat porównywania ciągów ze spacjami. Standard ANSI wymaga wypełnienia dla ciągów znaków używanych w porównaniach, aby ich długość była zgodna przed ich porównaniem. Wypełnienie ma bezpośredni wpływ na semantyka WHERE predykatów i klauzul i HAVING inne porównania ciągów Transact-SQL. Na przykład Transact-SQL uwzględnia ciągi 'abc' i 'abc ' odpowiada większości operacji porównania. Jedynym wyjątkiem od tej reguły jest predykat LIKE. Gdy prawa strona LIKE wyrażenia predykatu zawiera wartość z spacją końcową, aparat bazy danych nie podpełnia tych dwóch wartości do tej samej długości przed wystąpieniem porównania. Ponieważ celem LIKE predykatu, według definicji, jest ułatwienie wyszukiwania wzorców, a nie prostych testów równości ciągów, ten predykat nie narusza sekcji specyfikacji ANSI SQL-92 wymienionej wcześniej.

To SET ANSI_PADDING ustawienie nie ma wpływu na to, czy aparat bazy danych zawiera ciągi przed ich porównaniem. SET ANSI_PADDING ma wpływ tylko na to, czy końcowe wartości puste są przycinane z wartości wstawionych do tabeli, więc ma to wpływ na magazyn, ale nie porównania.

Examples

A. Porównywanie ciągów w klauzuli WHERE

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

B. Porównywanie ciągów w klauzuli WHERE przy użyciu konwersji z pliku binarnego

DECLARE @LNameBin BINARY (100) = 0x5A68656E67;

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

C. Przypisanie ciągu do zmiennej

W tym przykładzie pokazano proste przypisanie danych ciągu do zmiennej przy użyciu operatora =.

DECLARE @dbname VARCHAR(100);

SET @dbname = 'Adventure';

D. Porównanie ciągów z spacjami

Następujące zapytania ilustrują porównanie ciągów, w których jedna strona zawiera spacje, a druga nie:

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

Dalsze kroki