適用対象:SQL Server
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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 データベース エンジン機能を参照してください。
構文
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