web-dev-qa-db-ja.com

JSONオブジェクトをnvarcharとしてSQLServer2016に挿入する方法

SQL Server2016テーブルにいくつかのJSONオブジェクトを挿入したいと思います。

私のテーブル構造は次のとおりです。

field           type            nullable   default
name          | nvarchar(max) | true     | Null
age           | nvarchar(max) | true     | Null
homeAddress   | nvarchar(max) | true     | Null
officeAddress | nvarchar(max) | true     | Null

次のクエリを使用してデータを挿入しています。

DECLARE @json NVARCHAR(MAX) = N'{"name":"John Smith","age":32,"homeAddress":{"addr1":"123rd West Street, Willow Apt","addr2":"#55 Suite","zipCode":12345,"city":"Austin","state":"TX"},"officeAddress":{"addr1":"23rd West Street","addr2":"","zipCode":12345,"city":"Austin","state":"TX"}}';

INSERT INTO Employee 
    SELECT * 
    FROM OPENJSON(@json)
    WITH (name nvarchar(50), 
          age int, 
          homeAddress nvarchar(max), 
          officeAddress nvarchar(max)
         );

ただし、nameageの値のみがテーブルに入力されます。 homeAddressofficeAddressの両方の値がNULLです。

私のクエリの何が問題になっていますか? JSONオブジェクトをnvarcharとして挿入するにはどうすればよいですか?

4
KnightCavalry

SQL Server 2016でJSONを使用した経験がないことは認めますが、このチュートリアルを見てください。

https://docs.Microsoft.com/en-us/sql/relational-databases/json/solve-common-issues-with-json-in-sql-server

NVARCHAR(max)列の後にAS JSONを追加することが必要なようです。

INSERT INTO Employee 
    SELECT * 
    FROM OPENJSON(@json)
    WITH (name nvarchar(50), 
          age int, 
          homeAddress nvarchar(max) AS JSON, 
          officeAddress nvarchar(max) AS JSON
         );
4
Eric Petroelje