Может ли кто-нибудь привести пример того, как передать тип JSON в качестве параметра в хранимую процедуру SQL Server 2016 с использованием ADO.Net в проекте C # ASP.Net Core Web Api? Я хочу увидеть пример хранимой процедуры SQL Server 2016 и передать тип JSON в C # ASP.Net Core Web Api.

21
jump4791 27 Дек 2016 в 03:25
2
Очень хороший вопрос. я тоже хочу
 – 
Fabio Silva Lima
27 Дек 2016 в 03:31
1
AFIAK, Sql server 2016 не имеет типа данных JSON, поэтому вы просто передаете свой json в хранимую процедуру как varchar. Внутри хранимой процедуры вы можете использовать встроенные функции, которые умеют для обработки данных JSON. Вы можете увидеть пример кода в эту статью.
 – 
Zohar Peled
2 Янв 2017 в 12:19
В вашем вопросе два предложения, и оба они говорят в точности об одном и том же. И затем заголовок вашего вопроса говорит о том же снова . Пожалуйста, уберите свой вопрос.
 – 
Tomalak
2 Янв 2017 в 15:31

3 ответа

В SQL Server нет типа данных json, вы можете просто отправить свой json как nvarchar(max) в хранимую процедуру.

Если вы хотите сопоставить свой json с таблицей, вы можете использовать OPENJSON для преобразования данных в строки и столбцы.

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

39
marc_s 11 Июл 2021 в 15:13
Как и ожидалось, большое спасибо за это потрясающее решение
 – 
Hardik Masalawala
2 Мар 2020 в 13:57
За добавление собственного типа данных JSON проголосуйте за это: table" rel="nofollow noreferrer">feedback.azure.com/forums/908035-sql-server/suggestions/…
 – 
Amirhossein
27 Ноя 2020 в 17:52
На самом деле тип данных должен быть nvarchar(max) (а не просто varchar, как вы упомянули) - исправлено
 – 
marc_s
11 Июл 2021 в 15:13
Я обнаружил, что есть 2 требования для использования этой милой встроенной табличной функции: 1. SQL Server 2016 и более поздние версии и совместимость с базой данных >= 130 select compatibility_level from sys.databases
 – 
jvndev
21 Апр 2022 в 20:04

SQL Server 2016 имеет встроенную поддержку JSON - есть новый тип данных JSON (который основан на nvarchar), а также команда FOR JSON для преобразования вывода запроса в формат JSON.

Microsoft не включила отдельный тип данных JSON - вместо этого существует ряд функций JSON (для упаковки строк базы данных в JSON или для синтаксического анализа JSON в реляционные данные), которые работают со столбцами типа NVARCHAR(n)

Если у вас есть текст JSON, вы можете извлечь данные из JSON или убедиться, что JSON правильно отформатирован, с помощью встроенных функций JSON_VALUE, JSON_QUERY и ISJSON. Для более сложных запросов и анализа функция OPENJSON может преобразовывать массив объектов JSON в набор строк. Для возвращенного набора результатов можно выполнить любой SQL-запрос. Наконец, есть предложение FOR JSON, которое позволяет форматировать результаты запроса как текст JSON.

Итак, я рекомендую вам использовать NVARCHAR(MAX) в качестве параметра хранимой процедуры.

5
marc_s 8 Янв 2017 в 22:06

Простой пример, демонстрирующий C# и SQL, см.: https://chris.koester.io/index.php/2018/03/21/load-json-into-sql-server-using-a-stored-procedure-and-csharp/

У вас, вероятно, есть какой-то подход к уровню данных более высокого уровня в вашем C#, например, с EF или чем-то еще, но это позволит вам получить простую тестовую настройку, используя старую добрую ADO.Net SQLCommand.

0
Will 9 Дек 2020 в 23:31