【问题标题】:SQL Procedure filepath as parameterSQL 过程文件路径作为参数
【发布时间】:2019-10-03 21:48:38
【问题描述】:

我有以下程序从文件中读取 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

【问题讨论】:

    标签: sql parameters filepath procedure


    【解决方案1】:

    要在批量语句中获取文件路径,您需要使用动态 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
    

    【讨论】:

    • 首先感谢您的回复。其次,如果我想执行该过程,我当然假设我输入'C:\data.json'作为参数。但是,它给了我一个错误..我在这里遗漏了什么吗?
    • 最简单的调试方法是将“exec”更改为 PRINT /@script 或者如果您更喜欢 Select /@script - 然后您可以查看脚本是什么并跟踪错误。执行方法是正确的。
    猜你喜欢
    • 2014-12-20
    • 2010-09-24
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多