SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

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

重要

今後のバージョンの SQL Server では、CONCAT_NULL_YIELDS_NULL が常に ON になり、このオプションを明示的に OFF に設定するすべてのアプリケーションでエラーが発生します。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

SQL Server および Azure Synapse Analytics のサーバーレス SQL プール の構文

    
SET CONCAT_NULL_YIELDS_NULL { ON | OFF }   

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

  
SET CONCAT_NULL_YIELDS_NULL ON    

注意

SQL Server 2014 以前の 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  

参照

SET ステートメント (Transact-SQL)
SESSIONPROPERTY (Transact-SQL)