将JSON读取到本地SQL变量中



我想从Azure Blob存储中读取大量JSON文件(约1000个(,并将它们插入Azure SQL数据库SQL表中,方法与本教程相同,但要从文件中读取JSON,而不是内联。需要明确的是:我希望将每个文件读取为一个字符串,该字符串将成为表中的单个NVARCHAR(max(条目。这看起来应该很简单,但我不知道该怎么做

下面是我的代码,它在我评论的行中产生了一个错误"在'('附近语法不正确"。每个JSON文件只是一个字典,都有相同的键,沿着的行

{"D":"0.980287579","B":"0.679793971","C":"0.217004033","A":"0.655980258"}

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在OPENROWSET中插入变量。工作代码为:

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 @numObservations INT = 1000
DECLARE @json NVARCHAR(MAX)
DECLARE @file VARCHAR(4000)
DECLARE @sql VARCHAR(4000)
WHILE @i <= @numObservations
BEGIN
SET @file = 'testJSON' + CAST(@i AS VARCHAR(5)) + '.json'
SET @sql = N'INSERT INTO dbo.testJSON (rowID, jsonData)
SELECT ' + CAST(@i AS VARCHAR(5)) + ', * FROM OPENROWSET(BULK ''' + @file + ''', DATA_SOURCE = ''AzureBlobStorage'', SINGLE_CLOB) as x'
EXEC(@sql)
SET @i = @i + 1
END
GO

最新更新