Может ли кто-нибудь привести пример того, как передать тип JSON в качестве параметра в хранимую процедуру SQL Server 2016 с использованием ADO.Net в проекте C # ASP.Net Core Web Api? Я хочу увидеть пример хранимой процедуры SQL Server 2016 и передать тип JSON в C # ASP.Net Core Web Api.
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
nvarchar(max)
(а не просто varchar
, как вы упомянули) - исправлено
select compatibility_level from sys.databases
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)
в качестве параметра хранимой процедуры.
Простой пример, демонстрирующий 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.
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.