Share via


JSON_ARRAY (Transact-SQL)

適用対象: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

0 個以上の式から JSON 配列テキストを構築します。

構文

JSON_ARRAY ( [ <json_array_value> [,...n] ] [ <json_null_clause> ]  )  

<json_array_value> ::= value_expression

<json_null_clause> ::=
      NULL ON NULL
    | ABSENT ON NULL

引数

json_array_value

JSON 配列内の要素の値を定義する式です。

json_null_clause

value_expression が NULL の場合に、JSON_OBJECT 関数の動作を制御するために使用できます。 オプション NULL ON NULL を使用すると、JSON 配列内の要素の値を生成するときに、SQL NULL 値が JSON null 値に変換されます。 値が NULL の場合、オプション ABSENT ON NULL を使用すると、JSON 配列内の要素が省略されます。 このオプションの既定の設定は ABSENT ON NULL です。

戻り値

nvarchar(max) 型の有効な JSON 配列文字列を返します。

JSON_ARRAY 関数の出力に表示される内容の詳細については、次の記事を参照してください。

例 1

次の例では、空の JSON 配列を返します。

SELECT JSON_ARRAY();

結果

[]

例 2

次の例では、4 つの要素を持つ JSON 配列を返します。

SELECT JSON_ARRAY('a', 1, 'b', 2)

結果

["a",1,"b",2]

例 3

次の例では、入力値の 1 つが NULL であるため、3 つの要素を持つ JSON 配列を返します。 json_null_clause が省略され、このオプションの既定値が ABSENT ON NULL であるため、1 つの入力の NULL 値が JSON NULL 値に変換されることはありません。

SELECT JSON_ARRAY('a', 1, 'b', NULL)

結果

["a",1,"b"]

例 4

次の例では、4 つの要素を持つ JSON 配列を返します。 入力の SQL NULL 値が JSON 配列内で JSON NULL 値に変換されるように、NULL ON NULL オプションを指定します。

SELECT JSON_ARRAY('a', 1, NULL, 2 NULL ON NULL)

結果

["a",1,null,2]

例 5

次の例では、2 つの要素を持つ JSON 配列を返します。 1 つの要素には JSON 文字列が含まれており、もう 1 つの要素には JSON オブジェクトが含まれています。

SELECT JSON_ARRAY('a', JSON_OBJECT('name':'value', 'type':1))

結果

["a",{"name":"value","type":1}]

例 6

次の例では、3 つの要素を持つ JSON 配列を返します。 1 つの要素には JSON 文字列が含まれており、別の 1 つの要素には JSON オブジェクトが含まれており、もう 1 つの要素には JSON 配列が含まれています。

SELECT JSON_ARRAY('a', JSON_OBJECT('name':'value', 'type':1), JSON_ARRAY(1, null, 2 NULL ON NULL))

結果

["a",{"name":"value","type":1},[1,null,2]]

例 7

次の例では、入力を変数または SQL 式として指定した JSON 配列を返します。

DECLARE @id_value nvarchar(64) = NEWID();
SELECT JSON_ARRAY(1, @id_value, (SELECT @@SPID));

結果

[1,"4BEA4F9F-D169-414F-AF99-9270FDB2EA62",55]

例 8

次の例では、クエリの行ごとに、JSON 配列を返します。

SELECT s.session_id, JSON_ARRAY(s.host_name, s.program_name, s.client_interface_name)
FROM sys.dm_exec_sessions AS s
WHERE s.is_user_process = 1;

結果

session_id info
52 ["WIN16-VM","Microsoft SQL Server Management Studio - Query",".Net SqlClient Data Provider"]
55 ["WIN16-VM","Microsoft SQL Server Management Studio - Query",".Net SqlClient Data Provider"]
56 ["WIN19-VM","SQLServerCEIP",".Net SqlClient Data Provider"]