=(等于)(Transact-SQL)
适用于:Microsoft Fabric Microsoft Fabric
Warehouse 中的 SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse
Analytics Analytics Platform System (PDW)
SQL Analytics 终结点
比较 SQL Server 中两个表达式的等价性(比较运算符)。
语法
expression = expression
注意
若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档。
参数
expression
为任意有效的表达式。 如果表达式的数据类型不同,则其中一个表达式的数据类型必须可以隐式转换为另一个表达式的数据类型。 该转换基于数据类型优先级的规则进行。
结果类型
Boolean
备注
使用 NULL 表达式进行比较时,结果取决于 ANSI_NULLS
设置:
如果
ANSI_NULLS
设置为 ON,根据 ANSI 约定,即 NULL 是未知值且不能与任何其他值(包括其他 NULL)进行比较,任何与 NULL 进行比较的结果均为 UNKNOWN。如果
ANSI_NULLS
设置为 OFF,将 NULL 与 NULL 进行比较的结果为 TRUE,将 NULL 与任何其他值进行比较的结果为 FALSE。
有关详细信息,请参阅 SET ANSI_NULLS (Transact-SQL)。
在大多数情况下(并非所有情况),导致 UNKNOWN 的布尔表达式的行为类似于 FALSE。 请参阅 NULL 和 UNKNOWN (Transact-SQL) 和 NOT (Transact-SQL) 了解详细信息。
示例
A. 在简单查询中使用 =
下面的示例使用“等于”运算符返回 HumanResources.Department
表中的所有行,在该表中,GroupName
列中的值等于字词“Manufacturing”。
-- Uses AdventureWorks
SELECT DepartmentID, Name
FROM HumanResources.Department
WHERE GroupName = 'Manufacturing';
下面是结果集:
DepartmentID Name
------------ --------------------------------------------------
7 Production
8 Production Control
(2 row(s) affected)
B. 比较 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)