将CSV导入SQL Server,其中一列是JSON数据



是否有一种方法可以将CSV数据导入其中一列包含JSON数据的SQL Server表中?

示例CSV行可能如下:

1,{"testId": 2, "testName":"Hello!"},3,4,5

当我尝试使用以下SQL导入它时,它会选择JSON逗号作为delimeter

BULK INSERT TableName
FROM '<PathToCSV>'
WITH
(
FIRSTROW = 1,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0A',
TABLOCK
)

有没有一种方法可以像Excel处理方式一样,将它们智能地过滤为文字逗号,而不是delimeter?

编辑:假设我无法编辑CSV的

您可以使用CSV格式说明符和FIELDQUOTE,以确保引号中包含逗号的值不会被打断。这仅适用于SQL Server 2017以后的版本。

BULK INSERT SchoolsTemp
FROM '<PathToCSV>'
WITH
(
FORMAT = 'CSV', 
FIELDQUOTE = '"',
FIRSTROW = 1,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0A',
TABLOCK
)

对于JSON itelf,如果需要,您可以在使用OPENJSON导入后将其切碎。例如

INSERT SomeTable (Column1, Column2, ParentId)
SELECT
j.Column1,
j.Column2,
p.Id
FROM ParentTable p
CROSS APPLY OPENJSON(p.YourJson)
WITH (
Column1 int,
Column2 varchar(100)
) j;

最新更新