Путь к процедуре SQL в качестве параметра - PullRequest
0 голосов
/ 16 мая 2019

У меня есть следующая процедура, которая читает данные JSON из файла и сохраняет их в таблице.Теперь мне нужно изменить его, чтобы путь к файлу был параметром.Я пытался, хотя и не повезло.Спасибо

CREATE PROCEDURE main.loadData
AS
BEGIN
        DECLARE @jsonVariable NVARCHAR(max);
        SELECT @jsonVariable = BulkColumn
        FROM OPENROWSET (BULK 'C:\data.json', SINGLE_CLOB) as j;

INSERT INTO main.jsonData(restaurant, priceRange, country, score,         
reviewDate)
    SELECT * FROM OPENJSON(@jsonVariable, '$.reviews.row')
    WITH
    (
        restaurant VARCHAR(100) '$.restaurant',
        priceRange VARCHAR(50) '$.priceRange',
        country VARCHAR(50) '$.country',
        score INTEGER '$.score',
        reviewDate DATETIME '$.reviewDate'
    );  
END;
GO

1 Ответ

1 голос
/ 16 мая 2019

Чтобы получить путь к файлу в массовом операторе, вам нужно использовать динамический SQL по следующим строкам:

CREATE PROCEDURE main.loadData
@filepath varchar(200)
AS
BEGIN

Declare @script as varchar(max)

Set @script='
        DECLARE @jsonVariable NVARCHAR(max);
        SELECT @jsonVariable = BulkColumn
        FROM OPENROWSET (BULK ''' + @filepath + ''', SINGLE_CLOB) as j;

INSERT INTO main.jsonData(restaurant, priceRange, country, score,         
reviewDate)
    SELECT * FROM OPENJSON(@jsonVariable, ''$.reviews.row'')
    WITH
    (
        restaurant VARCHAR(100) ''$.restaurant'',
        priceRange VARCHAR(50) ''$.priceRange'',
        country VARCHAR(50) ''$.country'',
        score INTEGER ''$.score'',
        reviewDate DATETIME ''$.reviewDate''
    );'

Exec(@script)  
END;
GO
...