2017-09-20 2 views
3

Je souhaite insérer quelques objets JSON dans ma table SQL Server 2016.Comment insérer un objet JSON dans SQL Server 2016 en tant que nvarchar

Ma structure de table est la suivante:

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

J'utilise la requête suivante pour insérer mes données:

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

Cependant, seule la valeur de name et age sont renseignés dans le tableau . Les deux valeurs homeAddress et officeAddress sont NULL.

Quel est le problème avec ma requête? Comment puis-je insérer un objet JSON en tant que nvarchar?

+3

On dirait que les deux 'homeAddress' ainsi que' officeAddress' ne sont pas des chaînes tout simplement - mais JSON objets eux-mêmes ... –

+0

Oui homeAddress et officeAddress sont les deux objets JSON. Je suis à la recherche d'un tutoriel pour convertir les objets en chaîne, mais toujours pas de chance. – KnightCavalry

Répondre

1

Je vais admettre que je n'ai aucune expérience avec des choses JSON dans SQL Server 2016, mais en regardant ce tutoriel:

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

Il semble que l'ajout AS JSON après vos colonnes NVARCHAR(max) peut-être ce dont vous avez besoin:

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

C'est parfait. Je vous remercie! – KnightCavalry