通过@parameter将文件传递给OPENROWSET BULK json查询,SQL 2016

问题描述 投票:1回答:1

在sql 2016这工作:

SELECT @JSONFileData = BulkColumn FROM OPENROWSET (BULK  
'C:\Temp\Students_2015.json', SINGLE_CLOB) as JSON

这不是:

SELECT @JSONFileData = BulkColumn FROM OPENROWSET (BULK  ' + @FullFile + ' , 
SINGLE_CLOB) as JSON

Message: Cannot bulk load. The file " + @FullFile + " does not exist.

@FullFile ='C:\ Temp \ Students_2015.json'

我在一个将传入许多文件的SSDT项目中的Foreach循环容器中使用执行SQL任务。如何格式化我的SQL查询,以便我可以通过参数传递文件?

谢谢,

凯文

这是我的测试:

DECLARE @Year varchar(4)
SET @Year = '2015'

DECLARE @Path varchar(50)
SET @Path= 'C:\Temp\'

DECLARE @File varchar(10)
SET @File= 'Students_'

DECLARE @FullFile varchar(50)
SET @FullFile= @Path+@File+@Year+'.json'

Declare @JSONFileData varchar(max)

SELECT @JSONFileData = BulkColumn FROM OPENROWSET (BULK  
'C:\Temp\Students_2015.json', SINGLE_CLOB) as JSON

SELECT @JSONFileData = BulkColumn FROM OPENROWSET (BULK  ' + @FullFile + ' , 
SINGLE_CLOB) as JSON
sql sql-server-data-tools openrowset
1个回答
0
投票

动态SQL为我工作。另外,由于我正在解析一个JSON文件,我需要在'$ .xxx'json元素周围添加一组额外的''来成功查询文件。这是我的工作示例:

DECLARE @FullFile varchar(50)
SET @FullFile = 'C:\Temp\Students_2016.json'

DECLARE @sqlUpdate varchar(max)

SET @sqlUpdate = 
'Declare @JSONFileData varchar(max)
SELECT @JSONFileData = BulkColumn FROM OPENROWSET (BULK N''' + @FullFile + ''', 
SINGLE_CLOB) as JSON

INSERT INTO Student_Stage (
FirstName
)
SELECT  
JSON_VALUE(sourceTable.value, ''$.FirstName'') AS [FirstName]
FROM OPENJSON(@JSONFileData, ''$.Items'') AS sourceTable'
EXEC (@sqlupdate)
© www.soinside.com 2019 - 2024. All rights reserved.