Как вставить данные файла json в таблицу sql сервера с помощью команды sql - PullRequest
0 голосов
/ 23 апреля 2020

Я не очень знаком с SQL и надеюсь, что вы могли бы помочь мне в этой проблеме.

У меня есть таблица в моей sql серверной базе данных с именем Product

CREATE TABLE [dbo].[Product] (
[Age]          INT           NULL,
[Name]         NVARCHAR (50) NULL,
[Id]           NVARCHAR (50) NULL,
[Price]        DECIMAL (18)  NULL,
[ImageUrl]     NVARCHAR (50) NULL,
[Snippet]      NVARCHAR (50) NULL
)

У меня есть файл JSON (который находится в D:\demo\myjson.json), в котором хранится вся информация о моем продукте, например:

[
  {
      "Age": 0, 
      "Id": "motorola-xoom-with-wi-fi", 
      "ImageUrl": "static/imgs/phones/motorola-xoom-with-wi-fi.0.jpg", 
      "Name": "Motorola XOOM\u2122 with Wi-Fi", 
      "Price":5000,
      "Snippet": "The Next, Next Generation\r\n\r\nExperience the future with Motorola XOOM with Wi-Fi, the world's first tablet powered by Android 3.0 (Honeycomb)."
  }, 
  {
      "Age": 1, 
      "Id": "motorola-xoom", 
      "ImageUrl": "static/imgs/phones/motorola-xoom.0.jpg", 
      "Name": "MOTOROLA XOOM\u2122", 
      "Price":5000,
      "Snippet": "The Next, Next Generation\n\nExperience the future with MOTOROLA XOOM, the world's first tablet powered by Android 3.0 (Honeycomb)."
  }

]

Как мне написать sql, чтобы получить этот файл и импортировать данные в моя таблица Product вместо того, чтобы делать это вручную?

Я использую SQL Server 2016 и SSMS.

1 Ответ

2 голосов
/ 23 апреля 2020

Вы можете попробовать подход, который использует OPENROWSET() (для чтения файла) и OPENJSON() с явной схемой (tp анализирует ввод JSON). Обратите внимание, что для OPENROWSET() необходимы дополнительные разрешения . Если файл содержит ввод Unicode (widechar), вы должны использовать SINGLE_NCLOB.

DECLARE @json nvarchar(max)

SELECT @json = BulkColumn
FROM OPENROWSET (BULK 'D:\demo\myjson.json', SINGLE_CLOB) as j

INSERT INTO [Product] ([Age], [Name], [Id], [Price], [ImageUrl], [Snippet])
SELECT [Age], [Name], [Id], [Price], [ImageUrl], [Snippet]
FROM OPENJSON(@json) WITH (
   Age int '$.Age',
   Name nvarchar(50) '$.Name',
   Id nvarchar(50) '$.Id',
   ImageUrl nvarchar(50) '$.ImageUrl',
   Price decimal(18) '$.Price',
   Snippet nvarchar(50) '$.Snippet'
)
...