=(等于)(Transact-SQL)

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

主题链接图标 Transact-SQL 语法约定

语法

expression = expression

参数

  • expression
    任何有效的表达式。 如果表达式的数据类型不同,则其中一个表达式的数据类型必须可以隐式转换为另一个表达式的数据类型。 该转换基于数据类型优先级的规则进行。

结果类型

Boolean

注释

比较两个 NULL 表达式时,结果将取决于 ANSI_NULLS 设置:

  • 如果 ANSI_NULLS 设置为 ON,则根据 ANSI 有关一个 NULL(或未知)值与另一个 NULL 或未知值不相等的约定,结果为 NULL。

  • 如果 ANSI_NULLS 设置为 OFF,则 NULL 与 NULL 的比较结果为 TRUE。

将 NULL 与非 NULL 值比较,结果始终为 FALSE。 有关详细信息,请参阅 SET ANSI_NULLS (Transact-SQL)

示例

A.在简单查询中使用 =

下面的示例使用“等于”运算符返回 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)

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)