标签: sql-server-json

JSON 文本格式不正确。在位置 0 处发现意外字符“N”

我是 SQL 中 JSON 的新手。我收到错误“JSON 文本格式不正确。在位置 0 处发现意外字符“N”。” 执行以下操作时 -

DECLARE @json1 NVARCHAR(4000)
set @json1 = N'{"name":[{"FirstName":"John","LastName":"Doe"}], "age":31, "city":"New York"}'
DECLARE @v NVARCHAR(4000)
set @v = CONCAT('N''',(SELECT value FROM OPENJSON(@json1, '$.name')),'''')
--select @v as 'v'
SELECT  JSON_VALUE(@v,'$.FirstName')
Run Code Online (Sandbox Code Playgroud)

“ select @v as 'v' ”给了我

N'{"FirstName":"John","LastName":"Doe"}'
Run Code Online (Sandbox Code Playgroud)

但是,在最后一个 select 语句中使用它会给我错误。

DECLARE @v1 NVARCHAR(4000)
set @v1 = N'{"FirstName":"John","LastName":"Doe"}'
SELECT  JSON_VALUE(@v1,'$.FirstName') as 'FirstName'
Run Code Online (Sandbox Code Playgroud)

也工作正常。

json sql-server-2016 sql-server-json

11
推荐指数
2
解决办法
11万
查看次数

SQL Server FOR JSON路径嵌套数组

我们尝试在SQL Server 2016中使用FOR JSON Path从SQL查询中形成嵌套数组.

SQL查询:

SELECT A, 
B.name as [child.name],
B.date as [child.date]
 from Table 1 join Table 2 on Table 1.ID=Table 2.ID FOR JSON PATH
Run Code Online (Sandbox Code Playgroud)

期望的输出:

[{
A:"text",
   "child:"[
         {"name":"value", "date":"value"},
         {"name":"value", "date":"value"}

       ]
}]
Run Code Online (Sandbox Code Playgroud)

但是我们得到的是:

 [{
    A:"text",
    "child:" {"name":"value", "date":"value"}
  },
{
   A:"text",
  "child":{"name":"value", "date":"value"}
}]
Run Code Online (Sandbox Code Playgroud)

我们如何使用FOR JSON PATH来形成嵌套的子数组.

sql-server sql-server-json

6
推荐指数
1
解决办法
2355
查看次数

在SQL Server中串联或合并两个json对象

我有一个表在一个列中存储json。我想通过合并另一个json更新json值。

就像是:

insert into mytable 
values ('{ "a": "b" ')

update mytable 
set jsonColumn = JSON_MERGE(jsonColumn, '{ "c": 2 }')
Run Code Online (Sandbox Code Playgroud)

这应该导致像这样的json:

{ "a": "b", "c": 2 }
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有这样的JSON_MERGE功能,而JSON_MODIFY只允许我一一修改列。我有太多的东西,包括嵌套属性。

我基本上是在寻找等同于postgres || 级联运算符

sql-server json sql-server-json

6
推荐指数
2
解决办法
5965
查看次数

SQL Server JSON_Modify,如何更新全部?

我正在尝试使用Json_Modify更新所有列的值:

DECLARE @JSON NVARCHAR(MAX)
SET @JSON = 
N'{
"A":1,
"TMP": [    
    {"A":"VALUE1", "B": "VALUE2", "C": 1},
    {"A":"VALUE3", "B": "VALUE4", "C": 2},
    {"A":"VALUE5", "B": "VALUE6", "C": 3}]}
'

SET @JSON = JSON_MODIFY(@JSON, '$.TMP.A', 'JEJE')

SELECT * FROM OPENJSON(@JSON, '$.TMP') WITH ( A NCHAR(10), B NCHAR(10), C INT )
Run Code Online (Sandbox Code Playgroud)

我需要用"JEJE"更新所有列"A",例如,它不起作用.

sql-server json sql-server-2016 sql-server-json

5
推荐指数
1
解决办法
4487
查看次数

SQL Server 2016中JSON数据的where子句

我的表中有一个nvarchar(1000)字段,并且正在该列中存储JSON数据。

例如:

 CONTENT_RULE_ID    CONTENT_RULE
 1                  {"EntityType":"Inquiry", "Values":[1,2]}
 2                  {"EntityType":"Inquiry", "Values":[1,3]}
 3                  {"EntityType":"Inquiry", "Values":[2,4]}
 4                  {"EntityType":"Inquiry", "Values":[5,6,1]}
 6                  {"EntityType":"Inquiry", "Values":[8,1]}
 8                  {"EntityType":"Inquiry", "Values":[10,12,11]}
Run Code Online (Sandbox Code Playgroud)

由此我如何在sql server中使用JSON_QUERY获取所有查询ID为1的CONTENT_RULE_ID

sql-server json sql-server-2016 sql-server-json json-query

5
推荐指数
1
解决办法
1805
查看次数

在SQL Server中查询复杂的JSON-过滤对象数组

我在将Msft Sql Server中的JSON函数啮合在一起时遇到问题。我有一个表,用于存储复杂的JSON结构,并且需要提取对象数组的子集。

例如,我制作了一个简单的脚本,该脚本创建一个表并用一些记录填充该表:

CREATE TABLE JsonData ( CompanyId int IDENTITY(1,1) NOT NULL, Name varchar(50) NOT NULL, Json varchar(max) NOT NULL)

INSERT INTO JsonData (Name, Json) VALUES ('Company A', '{"Sector":"Food/Bev","EmployeeCount":105,"Address":{"Address1":"88 Oak Ave","Address2":"","City":"Madison","State":"WI","Zip":"11223"},"Vehicles":[{"Make":"Toyota","Model":"Camry","Year":2013,"Maintenance":[{"Desc":"Oil change","PerformedOn":"2017-04-01"},{"Desc":"Oil change","PerformedOn":"2017-08-01"}]},{"Make":"Ford","Model":"F150","Year":2010,"Maintenance":[{"Desc":"Oil change","PerformedOn":"2015-01-01"}]},{"Make":"Honda","Model":"Odyssey","Year":2010,"Maintenance":[{"Desc":"Oil change","PerformedOn":"2013-01-01"},{"Desc":"Oil change","PerformedOn":"2014-01-01"}]}]}');
INSERT INTO JsonData (Name, Json) VALUES ('Company B', '{"Sector":"Plastics","EmployeeCount":853,"Address":{"Address1":"100 Main St","Address2":"","City":"Anchorage","State":"AK","Zip":"56432"},"Vehicles":[{"Make":"Ford","Model":"F150","Year":2003,"Maintenance":[{"Desc":"Oil change","PerformedOn":"2017-01-01"},{"Desc":"Tire rotation","PerformedOn":"2017-01-01"},{"Desc":"Brake inspection","PerformedOn":"2017-02-01"}]},{"Make":"Ford","Model":"F150","Year":2008,"Maintenance":[{"Desc":"Oil change","PerformedOn":"2017-01-01"}]},{"Make":"Volkswagen","Model":"Jetta","Year":2010,"Maintenance":[]}]}');
INSERT INTO JsonData (Name, Json) VALUES ('Company C', '{"Sector":"Plastics","EmployeeCount":50,"Address":{"Address1":"99 Pine St","Address2":"","City":"Dallas","State":"TX","Zip":"33443"},"Vehicles":[{"Make":"Pontiac","Model":"Fiero","Year":1998,"Maintenance":[{"Desc":"Oil change","PerformedOn":"2010-04-01"},{"Desc":"Oil change","PerformedOn":"2000-08-01"}]},{"Make":"Chevy","Model":"Silverado","Year":2008,"Maintenance":[{"Desc":"Oil change","PerformedOn":"2010-01-01"}]},{"Make":"Honda","Model":"Odyssey","Year":2014,"Maintenance":[{"Desc":"Oil change","PerformedOn":"2015-04-01"},{"Desc":"Oil change","PerformedOn":"2015-09-01"}]}]}');
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取福特公司B公司车辆的清单。我的想法是获取公司B的记录,然后解析json以获取Make ='Ford'的Vehicles数组。该脚本有效,但是确实很笨拙。

在我看来,这应该全部汇总为一个声明。

DECLARE @vehicJson varchar(max);
SELECT @vehicJson = '{ "Vehicles": ' …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016 sql-server-json

5
推荐指数
1
解决办法
2910
查看次数

从 SQL Server 中的 JSON 获取键的名称

我有以下 JSON。

[
  {
    "attributes": {
        "2003": "Some text",
        "2004": 0,
        "2006": 0,
        "2008": 0,
        "2011": 0,
        "2120": 0
    },
    "path": "/Path1",
    "changeDate": "2019-11-11T13:56:37.987Z",
    "guid": "00000000-0000-0000-0000-000000000000",
    "version": 0,
    "timestamp": "2019-11-11T14:21:14.86427Z"
  },
  {
    "attributes": {
        "2121": 0,
        "2297": 0,
        "2298": 0,
        "2299": 0,
        "2805": 0,
        "8501": 0,
        "12004": 0,
        "13266": 0,
        "13282": 0

    },
    "path": "P:/Path2/SubPath",
    "changeDate": "2019-11-11T13:55:35.943Z",
    "guid": "705b30ab-53b0-42ee-bb98-6d80daae2e18",
    "version": 1,
    "timestamp": "2019-11-11T09:08:54.417Z"
  },
  {
    "attributes": {},
    "path": "PP:/OneMorePath",
    "changeDate": "2019-11-11T14:20:49.5Z",
    "guid": "b9aac8f3-1f2a-4b52-b8d8-af6b654d3f0f",
    "version": 41,
    "timestamp": "2019-11-11T13:26:24.723Z"
  }
]
Run Code Online (Sandbox Code Playgroud)

为此,我有两个 …

sql-server json sql-server-json

5
推荐指数
1
解决办法
3518
查看次数

SQL-Json 查询

我有类似于下面的表,其中有一对多映射

DECLARE @T1 TABLE(RootId int, [Name] varchar(50))
DECLARE @T2 TABLE(Id int,RootId int, Category varchar(50))

INSERT INTO @T1
VALUES(1,'Some Name 12121'),(2,'Some Name 343434')

INSERT INTO @T2
VALUES(100,1,'Category 3333'),
        (101,1,'Category 2222'),
        (102,1,'Category 4444'),
        (103,1,'Category 5555'),
        (104,2,'Category 1111'),
        (105,2,'Category 77777')
Run Code Online (Sandbox Code Playgroud)

我期望编写查询,以便它生成如下格式的 json,其中包含项目和子数组

    [
  {
    "item": {
      "rootId": 1,
      "name": "Some Name 12121",
      "sub": [
        {
          "id": 100,
          "category": "Category 3333"
        },
        {
          "id": 101,
          "category": "Category 2222"
        }
      ]
    }
  }
]
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下但无法达到预期的输出

SELECT T1.RootId,T1.Name,T2.Id AS [Sub.Id],T2.Category as [Sub.Category]
FROM @T1 T1
    INNER …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2016 sql-server-json

4
推荐指数
1
解决办法
83
查看次数

SQL Server 解析 JSON 以更新另一个表

我在其中一列中有一个包含 JSON 数据的表,我正在尝试解析 JSON 数据并插入到临时表中

DECLARE @TEMPTABLE
( 
     ID INT, 
     Status NVARCHAR(50), 
     Cost DECIMAL(20, 0)
)


INSERT INTO @TEMPTABLE
    SELECT 
        ID, 
        JSON_VALUE(mydata, '$.Status') AS Status,
        JSON_VALUE(mydata, '$.Cost') AS Cost 
    FROM Expense
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

将数据类型 nvarchar 转换为数字时出错

如果我注释掉该Cost列,同样可以正常工作。

成本表中的示例 JSON 数据

 | ID | mydata 
 +----+-------------------------------------
 | 1  | {"Status":"Shipped","Cost":"$10.50"}
Run Code Online (Sandbox Code Playgroud)

sql sql-server json sql-server-json json-value

2
推荐指数
1
解决办法
77
查看次数

如何从 MS SQL Json 字符串数组中选择字符串行?

我有一个包含 JSON 的文本字符串,如下所示:

'{ "d" : [ "test0", "test1", "test2" ] }'
Run Code Online (Sandbox Code Playgroud)

我想以行的形式检索数组的项目。

+------------+
|   data     | 
+------------+ 
|  test0     | 
|  test1     | 
|  test2     | 
+------------+  
Run Code Online (Sandbox Code Playgroud)

网络上的所有示例都展示了如何使用“对象数组”完成它,但我想用一个简单的“字符串数组” MS 示例来完成。

默认查询

+------------+
|   data     | 
+------------+ 
|  test0     | 
|  test1     | 
|  test2     | 
+------------+  
Run Code Online (Sandbox Code Playgroud)

只返回一个表,其中包含每个条目的键、值、类型

+-----+-------+------+
| key | value | type |
+-----+-------+------+
|   0 | test0 |    1 |
|   1 | test1 |    1 |
|   2 | test2 |    1 |
+-----+-------+------+ …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016 sql-server-json

1
推荐指数
1
解决办法
1065
查看次数

来自带有子级别的SQL查询的JSON

我的数据库中有一个简单的查询:

SELECT id, name FROM users FOR JSON AUTO, ROOT('users')
Run Code Online (Sandbox Code Playgroud)

这将返回以下JSON:

{
    "users": [
        {"id": "1", "name": "John"}
        {"id": "2", "name": "Mike"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想使用以下格式返回:

{
    "users": {
        "list": [
            {"id": "1", "name": "John"}
            {"id": "2", "name": "Mike"}
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以在SQL级别上通过简单地更改查询来做到这一点吗?

sql-server json sql-server-json

1
推荐指数
1
解决办法
43
查看次数