如何解决使用OPENROWSET执行代码的问题?

时间:2019-01-02 14:58:48

标签: sql-server tsql openrowset

我想用openrowset函数打开一个Excel数据集,但是仍然出现错误:

begin
    declare @pathname NVARCHAR(max) 

    set @pathname = N'\\{DATAPATH}
    select @pathname

    begin 
        exec (' drop_table mytable
                select *
                into mytable
                from OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0; IMEX=1; HDR=YES; Database =' + @pathname + ';'',
                                ''SELECT * FROM [Sheet1$]'');

                select * 
                from mytable')
end

这将导致:

  

第15级,州1,第17行的消息102
  'end'附近的语法不正确。

2 个答案:

答案 0 :(得分:0)

你好@Jędrzej_Adaszyński,欢迎来到stackoverflow! :)

您必须关闭一笔交易,您有两个交易,而您只完成了一个交易

begin
    declare @pathname NVARCHAR(max) 

    set @pathname = N'\\{DATAPATH}
    select @pathname

    begin 
        exec (' drop_table mytable
                select *
                into mytable
                from OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0; IMEX=1; HDR=YES; Database =' + @pathname + ';'',
                                ''SELECT * FROM [Sheet1$]'');

                select * 
                from mytable')
     end 

end

答案 1 :(得分:0)

您要解决几个不同的语法问题。

首先,它看起来像您在set语句的末尾忘记了引号,然后中断了其余脚本的引号。

第二个,就像其他人提到的那样,是您有两个开始,但只有一个结束。

尝试一下:

begin
    declare @pathname NVARCHAR(max) 

    set @pathname = N'\\{DATAPATH}'
    select @pathname

    begin 
        exec (' drop_table mytable
                select *
                into mytable
                from OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0; IMEX=1; HDR=YES; Database =' + @pathname + ';'',
                                ''SELECT * FROM [Sheet1$]'');

                select * 
                from mytable')
    end
end