分享方式:


= (等於) (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

比較 SQL Server 中兩個運算式是否相等 (比較運算子)。

Transact-SQL 語法慣例

語法

expression = expression  

引數

expression
這是任何有效的運算式。 如果運算式的資料類型不同,一個運算式的資料類型必須能夠隱含地轉換成另一運算式的資料類型。 轉換會以資料類型優先順序的規則為基礎。

結果類型

布林值

備註

當您使用 NULL 運算式進行比較時,結果會隨著 ANSI_NULLS 設定而不同:

  • 如果 ANSI_NULLS 設定為 ON,任何與 NULL 的比較結果為 UNKNOWN,其遵循 ANSI 慣例:NULL 是未知的值,而且無法與任何其他值 (包括其他的 NULL) 進行比較。

  • 如果 ANSI_NULLS 設定為 OFF,比較 NULL 與 NULL 的結果為 TRUE,而比較 NULL 與任何其他值的結果為 FALSE。

如需詳細資訊,請參閱 SET ANSI_NULLS (Transact-SQL)

在大部分情況下,導致 UNKNOWN 的布林運算式運作方式類似於 FALSE,但並非在所有的情況下都是如此。 如需詳細資訊,請參閱 NULL 和 UNKNOWN (Transact-SQL) and 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 和非 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)