Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在Json_值中选择Json对象作为nvarchar(max)_Sql Server_Open Json_Json Value - Fatal编程技术网

Sql server 在Json_值中选择Json对象作为nvarchar(max)

Sql server 在Json_值中选择Json对象作为nvarchar(max),sql-server,open-json,json-value,Sql Server,Open Json,Json Value,我不知道如何将JSON的路径提取为nvarchar(max)。它总是返回null 我不想指定要获取的字段,因为我不知道字段名。所以这里的想法是选择它作为一个字符串,稍后再处理它们 DECLARE @json nvarchar(max) = '{ "firstName": "John", "lastName" : "doe", "address" : { "streetAddress": "naist street", "city"

我不知道如何将JSON的路径提取为
nvarchar(max)
。它总是返回null

我不想指定要获取的字段,因为我不知道字段名。所以这里的想法是选择它作为一个字符串,稍后再处理它们

DECLARE @json nvarchar(max) =
'{
    "firstName": "John",
    "lastName" : "doe",
    "address"  : {
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
    }
}'

SELECT [Type]
FROM OPENJSON( @json, '$.address' ) 
WITH ([Type] NVARCHAR(max) '$');
预期结果是
Type
列将
address
的整个JSON对象作为字符串包含

{ "streetAddress": "naist street", "city": "Nara", "postalCode" : "630-0192" }

您需要以不同的方式执行该语句。请注意,在显式模式中使用
OPENJSON()
时,需要使用
作为JSON
来指定引用的属性包含内部JSON对象或数组。当然,您可以使用
JSON\u QUERY()
获得相同的结果:

JSON:

语句(使用
OPENJSON()
):

语句(使用
JSON\u QUERY()

结果:

Type
{
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
    }
SELECT *
FROM OPENJSON(@json) 
WITH ([Type] NVARCHAR(max) '$.address' AS JSON);
SELECT JSON_QUERY(@json, '$.address') AS [Type]
Type
{
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
    }