=(等于)(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

比较 SQL Server 中两个表达式的等价性(比较运算符)。

Transact-SQL 语法约定

语法

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)  
  

另请参阅

数据类型 (Transact-SQL)
表达式(Transact-SQL)
运算符 (Transact-SQL)