[英]Pass file by @parameter to OPENROWSET BULK json query, SQL 2016
In sql 2016 This works: 在sql 2016中,这有效:
SELECT @JSONFileData = BulkColumn FROM OPENROWSET (BULK
'C:\Temp\Students_2015.json', SINGLE_CLOB) as JSON
This does not: 这不是:
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' @FullFile ='C:\\ Temp \\ Students_2015.json'
I'm using an Execute SQL Task in a Foreach Loop Container, in a SSDT project that will pass in many files. 我在一个将传递许多文件的SSDT项目中的Foreach循环容器中使用Execute SQL Task。 How can I format my SQL query so I can pass files in by parameter? 如何格式化SQL查询,以便可以按参数传递文件?
Thanks, 谢谢,
Kevin 凯文
Here is my test: 这是我的测试:
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
Dynamic SQL worked for me. 动态SQL为我工作。 Additionally, since I was parsing a JSON file I needed to add an additional set of '' around the '$.xxx' json elements to query the file successfully. 另外,由于我正在解析JSON文件,因此需要在'$ .xxx'json元素周围添加另一组''以成功查询文件。 Here is my working example: 这是我的工作示例:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.