web-dev-qa-db-ja.com

ASP.Net CoreプロジェクトでADO.Netを使用して、JSON型をパラメーターとしてSQL Server 2016ストアドプロシージャに渡す

誰かがC#ASP.Net Core Web ApiプロジェクトでADO.Netを使用してSQL Server 2016ストアドプロシージャにJSONタイプをパラメータとして渡す方法の例を与えることができますか? SQL Server 2016のストアドプロシージャの例と、C#ASP.Net Core Web ApiでのJSON型の受け渡しが必要です。

12
jump4791

SQLサーバーにはjson data typeがありません。単にjsonvarcharとしてストアドプロシージャに送信できます。

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を処理するための詳細なアイデアを提供する非常に優れた詳細な記事です。

18
Mairaj Ahmad

SQL Server 2016にはネイティブJSONサポートがあります-nvarcharに基づく新しいJSONデータ型と、クエリからの出力をJSON形式に変換するFOR JSONコマンドがあります

Microsoftには個別のJSONデータ型は含まれていませんでした-代わりに、NVARCHAR(n)型の列で動作するJSON関数(データベース行をJSONにパッケージ化する、またはJSONをリレーショナルデータに解析する)がいくつかあります

JSONテキストがある場合、JSONからデータを抽出したり、組み込み関数_JSON_VALUE_、_JSON_QUERY_、およびISJSONを使用してJSONが適切にフォーマットされていることを確認できます。より高度なクエリと分析のために、OPENJSON関数はJSONオブジェクトの配列を一連の行に変換できます。返された結果セットに対して任意のSQLクエリを実行できます。最後に、クエリ結果をJSONテキストとしてフォーマットできるようにする_FOR JSON_句があります。

したがって、ストアドプロシージャのパラメーターとしてNVARCHAR(MAX)を使用することをお勧めします。

2
Saadi