Передать файл по параметру @ в запрос OPENROWSET BULK json, SQL 2016 - PullRequest
0 голосов
/ 07 сентября 2018

В кв. 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'

Я использую задачу «Выполнение SQL» в контейнере цикла по каждому элементу в проекте SSDT, который будет передаваться во многих файлах. Как я могу отформатировать свой запрос 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

1 Ответ

0 голосов
/ 07 сентября 2018

Динамический 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)
...