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

问题描述:

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

+2

非常好的问题。我也想 –

+0

AFIAK,Sql server 2016没有JSON数据类型,所以你只需将你的json作为varchar传递给存储过程即可。在存储过程中,您可以使用知道如何处理JSON数据的[内置函数](https://msdn.microsoft.com/en-us/library/dn921897.aspx)。您可以在[本文]中看到代码示例。(https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/09/08/passing-arrays-to-t-sql-procedures-as-json/) –

+0

在你的问题中有两个句子,他们都说*完全相同。然后你的问题的标题又说*完全一样* *。请清理你的问题。 – Tomalak

在sql服务器中没有json data type您可以简单地将您的json作为varchar发送到存储过程。

如果您想将您的json映射到表格,您可以使用使用OPENJSON将数据转换为rowscolumns

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)) 

Here是一个很好的和详细的文章,这将给你详细的想法来处理json data

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

微软没有包括单独的JSON数据类型 - 相反,有许多的JSON功能,这对类型的列进行操作NVARCHAR(n)

如果(到打包数据库行到JSON,或JSON解析成关系数据)你有JSON文本,你可以从JSON中提取数据,或者使用内置函数JSON_VALUEJSON_QUERYISJSON验证JSON格式是否正确。对于更高级的查询和分析,OPENJSON函数可以将JSON对象数组转换为一组行。任何SQL查询都可以在返回的结果集上执行。最后,有FOR JSON子句可让您将查询结果格式化为JSON文本。

因此,我建议您使用NVARCHAR(MAX)作为存储过程参数。