【问题标题】:How to insert JSON file data to SQL Server table using sql command如何使用 sql 命令将 JSON 文件数据插入 SQL Server 表
【发布时间】:2020-04-23 05:32:21
【问题描述】:

我对 SQL 不是很熟悉。

我的 SQL Server 数据库中有一个名为 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。

【问题讨论】:

  • 我建议通过查看您的数据将 [Snippet] 列从 NVARCHAR(50) 更改为 NVARCHAR(MAX)。

标签: sql json sql-server sql-server-2016


【解决方案1】:

您可以尝试一种方法,它使用OPENROWSET()(读取文件)和OPENJSON() 与显式模式(tp 解析输入 JSON)。请注意,OPENROWSET() 需要额外的 permissions。如果文件包含 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'
)

【讨论】:

  • 好的,我现在设法让它工作。非常感谢。还有一点问题是我一开始添加了错误的数据,列中有所有null 值但我无法删除它...见[这里](i.stack.imgur.com/lQnPD.png),你知道怎么处理吗?
  • @XingZou 如果要删除所有具有NULL 值的行,则应使用DELETE [Product] WHERE (Age IS NULL) AND (Name IS NULL) AND (Id IS NULL) AND (Price IS NULL) ... (all columns here) 之类的语句。
  • 工作,但我不知道为什么我不能通过选择这些行并右键单击选择删除选项来删除所有列...无论如何,再次感谢
猜你喜欢
  • 2021-02-19
  • 2020-03-20
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多