SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)

適用対象:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

連結の結果が NULL として取り扱われるのか、空文字列として取り扱われるのかを制御します。

Note

SET CONCAT_NULL_YIELDS_NULL OFF および CONCAT_NULL_YIELDS_NULL OFF データベース オプションは非推奨です。 SQL Server 2017 (14.x) 以降では、CONCAT_NULL_YIELDS_NULLは常に ON に設定されます。 非推奨の機能を新しいアプリケーションで使用しないでください。 詳細については、「SQL Server 2017 の非推奨のデータベース エンジン機能」を参照してください

Transact-SQL 構文表記規則

構文

SQL Server、Azure Synapse Analytics のサーバーレス SQL プール、Microsoft Fabric の構文

SET CONCAT_NULL_YIELDS_NULL { ON | OFF }   

Azure Synapse Analytics および Analytics Platform System (PDW) の構文

SET CONCAT_NULL_YIELDS_NULL ON    

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

解説

SET CONCAT_NULL_YIELDS_NULL が ON の場合、NULL 値を文字列と連結すると、結果は NULL になります。 たとえば、SELECT 'abc' + NULL の結果は NULL になります。 SET CONCAT_NULL_YIELDS_NULL が OFF の場合、NULL 値を文字列と連結すると、結果は元の文字列になり、NULL 値は空文字列として扱われます。 たとえば、SELECT 'abc' + NULL の結果は abc になります。

SET CONCAT_NULL_YIELDS_NULL を指定しなかった場合は、CONCAT_NULL_YIELDS_NULL データベース オプションの設定が適用されます。

注意

SET CONCAT_NULL_YIELDS_NULL は、ALTER DATABASE の CONCAT_NULL_YIELDS_NULL 設定と同じ設定です。

SET CONCAT_NULL_YIELDS_NULL の設定は、解析時ではなく実行時に設定されます。

インデックス付きビュー、計算列のインデックス、フィルター選択されたインデックス、または空間インデックスを作成または変更する場合は、SET CONCAT_NULL_YIELDS_NULL を ON に設定する必要があります。 SET CONCAT_NULL_YIELDS_NULL が OFF の場合、計算列にインデックスが設定されているテーブル、フィルター選択されたインデックス、空間インデックス、またはインデックス付きビューに対する CREATE、UPDATE、INSERT、および DELETE ステートメントはすべて失敗します。 インデックス付きビューおよび計算列上のインデックスに必要な SET オプション設定の詳細については、「SET ステートメント (Transact-SQL)」の「SET ステートメントの使用に関する留意事項」を参照してください。

CONCAT_NULL_YIELDS_NULL を OFF に設定した場合、複数のサーバーにまたがって文字列を連結することはできません。

この設定の現在の設定を表示するには、次のクエリを実行します。

DECLARE @CONCAT_SETTING VARCHAR(3) = 'OFF';  
IF ( (4096 & @@OPTIONS) = 4096 ) SET @CONCAT_SETTING = 'ON';  
SELECT @CONCAT_SETTING AS CONCAT_NULL_YIELDS_NULL; 

次の例では、両方の SET CONCAT_NULL_YIELDS_NULL 設定を示します。

PRINT 'Setting CONCAT_NULL_YIELDS_NULL ON';  
GO  
-- SET CONCAT_NULL_YIELDS_NULL ON and testing.  
SET CONCAT_NULL_YIELDS_NULL ON;  
GO  
SELECT 'abc' + NULL ;  
GO  
  
-- SET CONCAT_NULL_YIELDS_NULL OFF and testing.  
SET CONCAT_NULL_YIELDS_NULL OFF;  
GO  
SELECT 'abc' + NULL;   
GO