【发布时间】:2019-07-15 16:04:27
【问题描述】:
我正在使用 openjson 函数将 json 数据导入关系表。它包含字段应导入到子表。如何在 OPENJSON WITH 子句中进行子查询?
数据库有两个表 CourtSession 和 LigitigationType。 CourtSession 表对 LigitigationType 表有参考 (LigitigationTypeId - Id)。数据库图是
导入json数据的sql:
DECLARE @json NVARCHAR(MAX)
SET @json =
N'[
{
"date": "11.07.2019 09:00",
"judge": " Novik V.P",
"forma": "Criminal proceedings",
"number": "759/9893/18",
"involved": "The accused: Deaf Anatoly",
"description": "Theft",
"add_address": "01032, Kyiv, Kyiv, street. Zhilyanskaya, 142",
"courtroom": ""
},
]'
INSERT INTO CourtSession
SELECT jsonData.*
FROM OPENJSON(@json, N'$.CourtSessions')
WITH (
CourtDate DATETIME2 N'$.date',
Judge NVARCHAR(100) N'$.judge',
LigitigationTypeId INT (SELECT Id FROM LigitigationType Where JSON_VALUE(@json, '$.forma') = Name),
CourtNumber NVARCHAR(100) N'$.number',
Involved NVARCHAR(MAX) N'$.involved',
Description NVARCHAR(MAX) N'$.description',
Address NVARCHAR(300) N'$.add_address',
CourtRoom NVARCHAR(100) N'$.courtroom'
)
AS jsonData
我希望子查询通过 WITH 子句中的谓词“JSON_VALUE(@json, '$.forma') = Name”找到 LigitigationTypeId,但 sql-server 返回错误“'SELECT' 附近的语法不正确。”
【问题讨论】:
-
你不能在你的
WITH里面放一个子查询。您需要在FROM或SELECT之外进行。
标签: json sql-server tsql