= (равно) (Transact-SQL)
Проверяет равенство двух выражений (оператор сравнения) в SQL Server 2012.
Синтаксические обозначения в Transact-SQL
Синтаксис
expression = expression
Аргументы
- expression
Любое допустимое выражение. Если выражения относятся к разным типам данных, то тип данных одного выражения должен быть неявно доступным для преобразования в тип данных другого. Преобразование основано на правилах приоритетов типов данных.
Типы результата
Логическое выражение
Замечания
При сравнении двух выражений со значениями NULL результат зависит от параметра ANSI_NULLS.
Если параметр ANSI_NULLS равен ON, то результат будет равен NULL в соответствии со стандартом ANSI, когда NULL (или неизвестное) значение не равно NULL или другому неизвестному значению.
Если параметр ANSI_NULLS равен OFF, то результат сравнения двух значений NULL равен TRUE.
Сравнение значения NULL со значением, отличным от NULL, всегда дает результат FALSE. Дополнительные сведения см. в разделе SET ANSI_NULLS (Transact-SQL).
Примеры
А.Использование = в простом запросе
В следующем примере оператор равенства используется, чтобы возвратить все строки таблицы HumanResources.Department, в которых значение столбца GroupName равно слову «Manufacturing».
USE AdventureWorks2012;
GO
SELECT DepartmentID, Name
FROM HumanResources.Department
WHERE GroupName = 'Manufacturing';
Ниже приводится результирующий набор.
DepartmentID Name
------------ --------------------------------------------------
7 Production
8 Production Control
(2 row(s) affected)
Б.Сравнение значений NULL и значений, отличных от NULL
Следующий пример иллюстрирует использование операторов «равно» (=) и «не равно» (<>) для сравнения со значениями NULL и не NULL в таблице. Этот пример также демонстрирует, что использование конструкции IS NULL не зависит от значения параметра SET ANSI_NULLS.
-- Create table t1 and insert 3 rows.
CREATE TABLE dbo.t1 (a INT NULL);
INSERT INTO dbo.t1 VALUES (NULL),(0),(1);
GO
-- Print message and perform SELECT statements.
PRINT 'Testing default setting';
DECLARE @varname int;
SET @varname = NULL;
SELECT a
FROM t1
WHERE a = @varname;
SELECT a
FROM t1
WHERE a <> @varname;
SELECT a
FROM t1
WHERE a IS NULL;
GO
-- SET ANSI_NULLS to ON and test.
PRINT 'Testing ANSI_NULLS ON';
SET ANSI_NULLS ON;
GO
DECLARE @varname int;
SET @varname = NULL
SELECT a
FROM t1
WHERE a = @varname;
SELECT a
FROM t1
WHERE a <> @varname;
SELECT a
FROM t1
WHERE a IS NULL;
GO
-- SET ANSI_NULLS to OFF and test.
PRINT 'Testing SET ANSI_NULLS OFF';
SET ANSI_NULLS OFF;
GO
DECLARE @varname int;
SET @varname = NULL;
SELECT a
FROM t1
WHERE a = @varname;
SELECT a
FROM t1
WHERE a <> @varname;
SELECT a
FROM t1
WHERE a IS NULL;
GO
-- Drop table t1.
DROP TABLE dbo.t1;
Ниже приводится результирующий набор.
Testing default setting
a
-----------
NULL
(1 row(s) affected)
a
-----------
0
1
(2 row(s) affected)
a
-----------
NULL
(1 row(s) affected)
Testing ANSI_NULLS ON
a
-----------
(0 row(s) affected)
a
-----------
(0 row(s) affected)
a
-----------
NULL
(1 row(s) affected)
Testing SET ANSI_NULLS OFF
a
-----------
NULL
(1 row(s) affected)
a
-----------
0
1
(2 row(s) affected)
a
-----------
NULL
(1 row(s) affected)