Мне нужно создать хранимую процедуру, которая получает путь в качестве параметра и вставляет из файла в таблицу командой OPENROWSET.Использование динамического sql в openrowset создает ошибку
после многих поисков и попыток, я узнал, что OPENROWSET
не поддерживает параметры поддержки и, следовательно, должен быть «обманут» динамическим SQL.
Это часть, которая не работает, это показывает мне странную ошибку.
Это может быть вызвано OPENROWSET
, не принимающим параметр строки , но - я видел много фрагментов кода, которые построены аналогично, и пользователи говорят, что они работают.
Пожалуйста, помогите мне понять, что мне здесь не хватает, и как мне это сделать?
Спасибо!
Вот мой код:
Declare @string varchar(MAX) = 'C:\Users\akoga_000\Desktop\test1.xlsx'
DECLARE @sqlString AS varchar(MAX)=
'insert into gameIt_DBSummer.dbo.tblUser
select * from openrowset(
''Microsoft.ACE.OLEDB.12.0'',
''EXCEL 12.0;DataBase=''
'+cast(@string as varchar(max))+'
'';Extended Properties="EXCEL 12.0 Xml;HDR=YES'',
''SELECT * FROM [Sheet1$]''
)';
EXEC (@sqlString)
// Я пробовал также с EXEC sp_executesql и переменной NVARCHAR среди других вариантов
Здесь ошибка:
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near 'C:'.
Спасибо!
Благодарим за ответ! Я сделал то, что вы предложили. и он semms, что он решил ошибку синтаксиса, но теперь я получаю еще одну ошибку: поставщик OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «(null)» возвращенное сообщение «Не удается обновить. База данных или объект доступен только для чтения . ". Msg 7303, уровень 16, состояние 1, строка 1 Невозможно инициализировать объект источника данных поставщика OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «(null)». Файл и база данных не читаются только ... Любые идеи? Спасибо! –
Взгляните на это: [link] http://stackoverflow.com/questions/26267224/the-ole-db-provider-microsoft-ace-oledb-12-0-for-linked-server-null –