我想将这些数据从Json文件插入到Sql表的多个表中,并使用它们的关系(外键)将所有数据链接到一个主表
数据库将具有链接到每个SQL级别的标识。还希望将所有三个表的数据合并到一个主表table_master中,该主表将具有基于内部元素记录id 2的最终数据数 预计将数据更新到SQL Server 2016的表中 使用外键的表结构 还有如何将相同的数据导出到共享网络驱动器文件夹中的Json中 复制代码:我想将这些数据从Json文件插入到Sql表的多个表中,并使用它们的关系(外键)将所有数据链接到一个主表,sql,json,sql-server-2016-express,Sql,Json,Sql Server 2016 Express,数据库将具有链接到每个SQL级别的标识。还希望将所有三个表的数据合并到一个主表table_master中,该主表将具有基于内部元素记录id 2的最终数据数 预计将数据更新到SQL Server 2016的表中 使用外键的表结构 还有如何将相同的数据导出到共享网络驱动器文件夹中的Json中 复制代码: IF OBJECT_ID('dbo.Table1') IS NULL CREATE TABLE dbo.Table1 ( Name VARCHAR(100), Locati
IF OBJECT_ID('dbo.Table1') IS NULL
CREATE TABLE dbo.Table1
(
Name VARCHAR(100), Location VARCHAR(100), Region VARCHAR(100)
)
DECLARE @MYJSON VARCHAR(1000)
SET @MYJSON = '
{
"Name":"ABC",
"Location":"East US",
"Region":"West US",
"Element":
[
{
"Name":"IE1",
"Description":"IE1 Description",
"Type":"Small",
"InnerElement":
[
{ "Key":"Name", "Value":"IME1"},
{"Key":"AnotherProperty","Value":"Value1"}
]
},
{
"Name":"IE2",
"Description":"IE2 Description",
"Type":"Medium",
"InnerElement":
[
{"Key":"Name","Value":"IME2"},
{"Key":"Address","Value":"Xyz"},
{"Key":"Type","Value":"Simple"},
{"Key":"LastProperty","Value":"ValueX"}
]
}
]}
'
SELECT
JSON_VALUE(@MYJSON,'$.Name') As Name,
JSON_VALUE(@MYJSON,'$.Location') As Location,
JSON_VALUE(@MYJSON,'$.Region') As Region
请看,我已经尝试过了,我的数据也正在导入,但数据库中插入的值正在变为nullPlease 1。将数据表示为文本,而不是图片;2.标记您正在使用的实际数据库以及要使用的集成工具。3.显示您尝试过的内容请不要将代码作为图像发布。更多详情请参见此处:@Nick.McDermaid我无法解决此问题,我已参考以下解决方案,但无法实现我的期望。如果可能的话,你能帮我完成吗?我已经编辑了你的问题并添加了一些代码。您可以添加其他表创建定义和迄今为止实际尝试过的任何代码吗。这使我们能够快速复制/粘贴到我们的开发环境中以提供帮助。如果你不提供一个简单的起点,你就不太可能提供帮助。另外,没有repo意味着你没有尝试过任何东西。另外,请注意,在你提到的问题中,如果你包括了所有问题的createtable语句,那么回答第一条注释就方便多了tables@Nick.McDermaid请看我使用了上面的查询来获取数据。数据被插入为空。但我没有得到预期的结果。谢谢你,尼克,通过我上面的SQL代码,我得到了预期的结果。@Nick.McDermaid你能帮助我如何将多个Json文件读入SQL。Json文件列表在哪里?您只需重复使用上述内容并围绕它们循环即可。
USE JSON_CAT GO DECLARE @JsonObject NVARCHAR(MAX)
SELECT @JsonObject=BulkColumn from openrowset (BULK 'C:\Users\uverma\Desktop\Test.Json, SINGLE_CLOB)T
BEGIN TRANSACTION;
INSERT Table1([Name], [Location], [Region])
SELECT [Name], [Location], [Region]
FROM OPENJSON(@JsonObject, '$.InnerElement')
WITH ( [Name] VARCHAR(100), [Location] VARCHAR(100), [Region] VARCHAR(100));
DECLARE @Table1Id INT = SCOPE_IDENTITY();
DECLARE @Table3Input TABLE([Table2Id] INT, [InnerMostElement] NVARCHAR(MAX));
MERGE Table2
USING ( SELECT [Name], [Description], [Type], [InnerMostElement]
FROM OPENJSON(@JsonObject, '$.InnerElement')
WITH ( [Name] VARCHAR(100), [Description] VARCHAR(100), [Type] VARCHAR(100), [InnerMostElement] NVARCHAR(MAX) AS JSON )) AS J
ON 1 = 0
-- Always INSERT
WHEN NOT MATCHED THEN
INSERT([Table1Id], [Name], [Description], [Type])
VALUES (@Table1Id, J.[Name], J.[Description], J.[Type])
OUTPUT inserted.Id, J.[InnerMostElement]
INTO @Table3Input([Table2Id], [InnerMostElement]);
INSERT Table3([Table2Id], [Key], [Value])
SELECT [Table2Id], KV.[Key], KV.[Value]
FROM @Table3Input
CROSS APPLY ( SELECT [Key], [Value]
FROM OPENJSON([InnerMostElement])
WITH ( [Key] VARCHAR(100),[Value] VARCHAR(100))) AS KV;
COMMIT;