【问题标题】:SQL JSON Table IssueSQL JSON 表问题
【发布时间】:2018-05-26 08:28:54
【问题描述】:

我正在从工作正常的外部 JSON 文件导入数据,但我还希望包含一个存储当前日期/时间的列,以存储提取数据的时间。

CREATE PROCEDURE main.loadJSON
AS 

DECLARE @Details NVARCHAR(MAX)

SELECT @Details = 
    BulkColumn
    FROM OPENROWSET(BULK'C:\Users\Vally\Desktop\persondata.json',SINGLE_CLOB) JSON



    INSERT INTO main.jsontable (dateloaded,name,surname,email,age,balance,country,registered)
    VALUES(GETDATE(),
    (SELECT *
    FROM OPENJSON(@Details,'$.PersonDetails.Person')        
    WITH(
        [Name] NVARCHAR(50)         '$.first_name',
        [Surname] NVARCHAR(50)      '$.last_name',
        [Email] NVARCHAR(50)        '$.email',
        [Age] NVARCHAR(50)          '$.age',
        [Balance] NVARCHAR(50)      '$.balance',
        [Country] NVARCHAR(50)      '$.country',
        [Registered] NVARCHAR(50)   '$.registered'
        )
    )
)
GO

它给了我 2 个错误。

第 27 行 当子查询不使用 EXISTS 引入时,选择列表中只能指定一个表达式。

第 13 行 INSERT 语句中的列多于 VALUES 子句中指定的值。 VALUES 子句中的值数必须与 INSERT 语句中指定的列数匹配。

有什么问题?

【问题讨论】:

    标签: sql


    【解决方案1】:

    不要使用 SELECT * 而是明确指定所有列

    【讨论】:

    • 如何使用 SELECT 选择 JSON 语句?我尝试输入 $ 值,但没有用,它所做的只是输入文本 '$.first_name'..etc
    • 没关系,我已经修好了。如果其他人遇到这个问题,我只需将 [name],[surname] 放入选择中,谢谢兰迪 :)
    猜你喜欢
    • 2020-10-01
    • 2017-09-21
    • 1970-01-01
    • 2021-11-18
    • 2010-09-27
    • 2020-09-24
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多