我看到的每个示例都JSON_MODIFY
显示了将简单的值(例如a)string
插入到数组中。
假设我在SQL Server列中存储了以下JSON:
[{"id": 1, "name": "One"}, {"id": 2, "name": "Two"}]
我该如何追加{"id": 3, "name": "Three"}
呢?
当我尝试JSON_MODIFY
如下所示使用时,将string
插入一个:
UPDATE TheTable SET TheJSON = JSON_MODIFY(TheJSON, 'append $', N'{"id": 3, "name": "Three"}') WHERE Condition = 1;
这是TheJSON
列的结果值:
[{"id": 1, "name": "One"}, {"id": 2, "name": "Two"}, "{\"id\":3, \"name\": \"Three\"}"]
我注意到我可以这样创建JSON字符串:
SELECT json.*
FROM TheTable t
CROSS APPLY OPENJSON(t.TheJSON) WITH (
id int N'$.id',
name nvarchar(100) N'$.name'
)
UNION ALL
SELECT 3 as id, N'Three' as name
FOR JSON AUTO;
但是,当我尝试在更新语句中使用它时,它不起作用:
UPDATE TheTable
SET TheJSON = (
SELECT json.* FROM TheTable t
CROSS APPLY OPENJSON(t.TheJSON) WITH (
id int N'$.id',
name nvarchar(100) N'$.name'
) as json
UNION ALL -- NO ERROR (and no update) when I remove UNION ALL+SELECT
SELECT 3 as id, N'Three' as name
FOR JSON AUTO
);
我收到以下错误:
消息1086,级别15,状态1,第1行:当FOR XML和FOR
JSON子句包含set运算符时,它们在视图,内联函数,派生表和子查询中无效。要解决此问题,请使用派生表或公用表表达式或视图包装包含set运算符的SELECT并在其之上应用FOR
XML或FOR JSON。
您应该将JSON_MODIFY
语句的第三个参数包装为JSON_QUERY()
:
UPDATE TheTable
SET TheJSON = JSON_MODIFY(TheJSON, 'append $', JSON_QUERY(N'{"id": 3, "name": "Three"}'))
WHERE Condition = 1;
这是一个完整的示例:
DECLARE @TheTable table(TheJSON nvarchar(max), Condition int )
DECLARE @mystring nvarchar(100)='{"id": 3, "name": "Three"}'
INSERT INTO @TheTable SELECT '[{"id": 1, "name": "One"}, {"id": 2, "name": "Two"}]', 1
UPDATE @TheTable
SET TheJSON = JSON_MODIFY(TheJSON, 'append $', JSON_QUERY(N'{"id": 3, "name": "Three"}'))
WHERE Condition = 1;
SELECT TheJSON FROM @TheTable
这是最终输出:
[{"id": 1, "name": "One"}, {"id": 2, "name": "Two"},{"id": 3, "name": "Three"}]
有关JSON_QUERY
此的更多信息,有关此问题的说明,请参见此处。
我想将行插入到具有唯一的、非自动递增主键的表中。 是否有一个本机SQL函数来计算最后一个键并将其递增,还是必须分两步进行:
我正在努力将JSON对象插入我的postgres v9.4 DB。我已经将名为“evtjson”的列定义为类型json(而不是jsonb)。 我试图在Java(jdk1.8)中使用准备好的语句将Json对象(使用JEEjavax.json库构建)插入到列中,但我一直遇到SQLException错误。 我使用以下方法创建JSON对象: 然后,我将这个对象作为参数传递给另一个方法,以使用准备好的语句将
问题内容: 我是Elasticsearch的新手,正在寻找使用Java API的帮助。我有一些领域对象,例如 我已经创建了连接到节点的传输客户端 有没有简单的方法将我的对象直接插入elasticsearch? 我看到了 但是要做到这一点,我必须将每个对象都转换成json,这虽然不是我理想的情况。 如果我对它的工作方式(架构上)有误解,请告诉我,我在这里学习! 欢呼声,罗布 问题答案: 我认为您在正
问题内容: 我想在我的SQL Server 2016表中插入一些JSON对象。 我的表结构如下: 我正在使用以下查询来插入我的数据: 但是,表中仅填充和的值。这两个和值是NULL。 我的查询出了什么问题?如何将JSON对象作为nvarchar插入? 问题答案: 我承认我对SQL Server 2016中的JSON内容没有任何经验,但是请看一下本教程: https://docs.microsoft.
问题内容: 我在Javascript中有一个功能: data参数是一个JSON对象。 但是每次我单击按钮时,它都会覆盖本地存储中的数据。 有人知道怎么做这个吗? 问题答案: 您需要采取一些步骤将这些信息正确存储在localStorage中。但是,在开始编写代码之前,请注意,localStorage(当前) 不能 保存除字符串以外的任何数据类型。您将需要序列化阵列进行存储,然后将其解析回去以对其进行
这里是将上面的yaml文件转换为JSON对象,并尝试根据ID查找一张照片: 得到了以下结果: 问题:我怀疑在console.log(photoArray)的结果中获取“照片”导致我基于id的照片搜索失败。如何去除这个?我相信如果这个被移除,搜索和返回照片将会起作用