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データベースオプションは廃止されています。 2017 SQL Server(14.x)以降、CONCAT_NULL_YIELDS_NULLは常にONに設定されています。 非推奨の機能を新しいアプリケーションで使用しないでください。 詳細については、SQL Server 2017 のdeprecated データベース エンジン機能を参照してください。

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    

解説

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データベースオプションの設定が適用されます。

Note

SET 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 がオフの場合、計算されたカラム、フィルタリングされたインデックス、空間インデックス、インデックス表示のいずれも、計算されたカラム、フィルタリングインデックス、空間インデックス、インデックスビューにインデックスを持つテーブル上のCREATE、UPDATE、INSERT、DELETE文は失敗します。 計算された列にインデックス化されたビューやインデックスを含む必須SETオプション設定の詳細については、SETステートメント(Transact-SQL)の「Considerations Using the SET Statements」をご覧ください。

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