问题 使用ASP.Net Core项目中的ADO.Net将JSON类型作为参数传递给SQL Server 2016存储过程


有人可以举例说明如何使用C#ASP.Net Core Web Api项目中的ADO.Net将JSON类型作为参数传递给SQL Server 2016存储过程吗? 我想在C#ASP.Net Core Web Api中看到SQL Server 2016存储过程的示例和JSON类型的传递。


7213
2017-12-27 00:25


起源

非常好的问题。我也想 - Fabio Silva Lima
AFIAK,Sql server 2016没有JSON数据类型,因此您只需将json作为varchar传递给存储过程。在存储过程中,您可以使用 内置功能 知道如何处理JSON数据。您可以在中查看代码示例 本文。 - Zohar Peled
你的问题有两个句子,他们都说 究竟 一样的东西。然后你问题的标题说的完全一样 再次。请清理你的问题。 - Tomalak


答案:


没有 json data type 在sql sever中你可以简单地发送你的 json 如 varchar 到存储过程。

如果要将json映射到表,可以使用 OPENJSON 将数据转换为 rows 和 columns

CREATE PROCEDURE SaveJSON
@pID int,
@pJson nvarchar(max)

AS
BEGIN

INSERT INTO [YourTable]
       ([ID]
       ,[JSONData])
 VALUES
       (@pID
       ,@pJson)
END

如果要将json对象与表映射,可以执行此操作

//json would be something like this
[
 { "id" : 2,"name": "John"},
 { "id" : 5,"name": "John"}
]

INSERT INTO YourTable (id,Name)
SELECT id, name
FROM OPENJSON(@pJson)
WITH (id int,
name nvarchar(max))

这里 是一篇非常好的,详细的文章,会给你详细的想法来处理 json data


14
2018-01-04 06:14





SQL Server 2016确实具有本机JSON支持 - 一种新的JSON数据类型(基于 nvarchar),以及FOR JSON命令将查询的输出转换为JSON格式

Microsoft没有包含单独的JSON数据类型 - 相反,有许多JSON函数(将数据库行打包成JSON,或将JSON解析为关系数据),这些函数对类型的列进行操作 NVARCHAR(n)

如果您有JSON文本,则可以从JSON中提取数据或使用内置函数验证JSON是否已正确格式化 JSON_VALUEJSON_QUERY,和 ISJSON。对于更高级的查询和分析, OPENJSON function可以将JSON对象数组转换为一组行。可以在返回的结果集上执行任何SQL查询。最后,还有 FOR JSON 使您能够将查询结果格式化为JSON文本的子句。

所以,我建议你使用 NVARCHAR(MAX) 作为您的存储过程参数。


0
2018-01-05 11:59