【发布时间】:2018-07-27 06:57:15
【问题描述】:
我想从 Azure Blob 存储读取大量 JSON 文件(大约 1000 个)并将它们插入到 Azure SQL 数据库 SQL 表中,按照 this tutorial 的行,但通过从文件中读取 JSON 而不是内联.需要明确的是:我希望每个文件都被读取为一个字符串,该字符串成为表中的单个 NVARCHAR(max) 条目。这似乎应该很简单,但我不知道该怎么做。
下面是我的代码,它在我注释的行中产生错误“'('附近的语法不正确”。每个 JSON 文件只是一个字典,都具有相同的键,沿线
{“D”:“0.980287579”,“B”:“0.679793971”,“C”:“0.217004033”,“A”:“0.675980258”}
IF OBJECT_ID(N'dbo.testJSON', N'U') IS NOT NULL
DROP TABLE dbo.testJSON
GO
CREATE TABLE dbo.testJSON (
rowID smallint NOT NULL PRIMARY KEY,
jsonData nvarchar(max)
)
GO
ALTER TABLE dbo.testJSON
ADD CONSTRAINT [Check for JSON] CHECK (ISJSON(jsonData)=1)
GO
DECLARE @i INT = 1
DECLARE @json AS NVARCHAR(MAX)
DECLARE @file AS VARCHAR(4000)
WHILE @i < 1000
BEGIN
SET @file = 'JSONfile' + CAST(@i AS VARCHAR(5)) + '.json'
-- Line below doesn't work
SELECT @json = BulkColumn FROM OPENROWSET(BULK(@file), SINGLE_CLOB) AS j
-- Line above doesn't work
INSERT INTO dbo.testJSON (rowID, jsonData) VALUES (@i, @json)
set @i = @i + 1
END
GO
感谢大家的帮助!
【问题讨论】:
-
您的文件在哪里?这有点重要。如果这是在 SQL Azure 中,那么您可以使用
CREATE EXTERNAL DATA SOURCE来引用 Blob 存储。然后你可以使用BULK INSERT从blob存储中插入文件并将它们写入表。 -
不要写“不起作用”。实际上解释发生了什么。监视器飞走了?植物从你的键盘上长出来了?
-
@Nick.McDermaid 已更新。是的,它是 Azure,但它不像
BULK INSERT那样简单(我不这么认为)。我只想要一个包含 JSON 字符串的列。我什至找不到正确的语法来传递给OPENROWSET,但我已经指定了错误消息... -
感谢您为您的问题添加详细信息。 Blob 存储肯定不能访问 vai C 驱动器。过去,我曾将 blob 中的多行文件插入 SQL Azure。唯一的区别是您的文件只有一行。我想我之前已经在这里解释过 - 我会看看能不能找到它
-
这是从 blob 存储argonsys.com/learn-microsoft-cloud/library/…将文件插入 SQL Azure 的基本指南
标签: sql json azure-sql-database