Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Update EXCEL / 4 сообщений из 4, страница 1 из 1
25.06.2013, 12:27
    #38309318
pio777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update EXCEL
Добрый день хочу обновлять ексель файл:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
EXEC master.dbo.sp_addlinkedserver
      @server = N'LS_EXCEL', 
      @srvproduct=N'ms ace 12', 
      @provider=N'Microsoft.ACE.OLEDB.12.0', 
      @datasrc=N'\\SQL103\TEMP\Product\PLAN.xlsx', 
      @provstr=N'Excel 12.0;'
go
EXEC sp_addlinkedsrvlogin N'LS_EXCEL', 'False'
go
UPDATE [LS_EXCEL]...[PLAN$] SET [Col1]='b'


Получаю ошибку:
авторOLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "LS_EXCEL" returned message "Syntax error in UPDATE statement.".
Msg 7321, Level 16, State 2, Line 1
An error occurred while preparing the query "UPDATE PLAN$ set `Col1` = 'b' " for execution against OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "LS_EXCEL".

В то время, как select работает.
...
Рейтинг: 0 / 0
25.06.2013, 12:34
    #38309334
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update EXCEL
pio777,

по мотивам нашего форума и гугла
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
-- Вставить данные в Excel-файл. Файл должен содержать заголовки для столбцов, в нашем случае ИНН и Date. Данные дозаписываются в конец.
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=d:\f.xls;', 'SELECT [ИНН], [ФИО] FROM [Лист1$]') 
SELECT [name], convert(varchar,getdate(),104) FROM sys.objects

-- Обновление данных
update opendatasource('Microsoft.Jet.OLEDB.4.0','Data Source="d:\f.xls";Extended Properties=Excel 8.0')...[Лист1$]
set [ТабНомер] = 'abc'
where [ФИО] = 'чему-то там'  -- тут по ходу дела `where` обязательно, причем условие типа `where 1=1` не катит...

-- Напрямую удалять нельзя, но можно так
update OpenDataSource ('Microsoft.Jet.OLEDB.4.0','Data Source="d:\f.xls";User ID=Admin;Password=;Extended properties="Excel 8.0;HRD=YES"')...[Лист1$]
set [ТабНомер]=NULL,
[ФИО] = NULL
where [ИНН] <> '`' -- тут по ходу дела `where` обязательно, причем условие типа `where 1=1` не катит...

--Насколько я понял, с DELETE все сложно. Но вот с UPDATE... Сначала и он не хотел работать. Потом я изменил значение поля
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows на 0 
-- и UPDATE заработал.


Статья "Delete data in Excel using Openrowset?"
http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/7f79cfde-2f1f-4cad-94f8-07397b998296/
...
Рейтинг: 0 / 0
25.06.2013, 12:58
    #38309400
pio777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update EXCEL
user89,

Через OPENROWSET у меня все и работало:

Код: sql
1.
2.
3.
4.
5.
6.
UPDATE DATA
SET 
[Col1]='a'
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 12.0;HDR=Yes;DATABASE=\\SQL103\TEMP\Product\PLAN.xlsx', 
'SELECT * FROM [PLAN$]') AS DATA



Мне интересно почему не работает через linkedserver.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
18.11.2020, 11:32
    #40019855
Besm1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update EXCEL
user89,

У меня такая ошибка с провайдером Microsoft.ACE.OLEDB.12.0. Ни ветки HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\, ни по аналогии HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ACE\12.0 ... я в реестре не обнаружил.
Но работает с OPENROWSET.
Как от этого избавиться?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Update EXCEL / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]