Как мне исправить мою проблему с выполнением кода с помощью OPENROWSET? - PullRequest
0 голосов
/ 02 января 2019

Я хочу открыть набор данных Excel с функцией openrowset, но продолжает появляться ошибка:

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

Что приводит к:

Сообщение 102, Уровень 15, Состояние 1, Строка 17
Неверный синтаксис рядом с 'end'.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

У вас есть пара различных синтаксических проблем для решения.

Во-первых, похоже, что вы забыли кавычку в конце оператора 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
0 голосов
/ 02 января 2019

Здравствуйте @ 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
...