Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Андрей Усачёв Member Откуда: Рига, Латвия Сообщений: 128 |
Требуется линковать файлы Excel к обычным таблицам SQL-сервера примерно так:select * from openrowset('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=\\server\share\file.xls', 'SELECT * FROM [Sheet1$]') as X inner join Table1 on X.Field1 = Table1.Field1 Она почти выполнена. Для этого я проделал следующие действия: 1) На свежем SQL Server 2008 R2 x64 Установил Microsoft Access Database Engine 2010 Redistributable x64. 2) Выполнил: EXEC sp_configure 'show advanced options', 1 RECONFIGURE GO EXEC sp_configure 'ad hoc distributed queries', 1 RECONFIGURE GO 3) Выполнил: USE [master] GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'NestedQueries', 1 GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'NonTransactedUpdates', 1 GO 4) Вручную прописал значение в реестре: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\{тут правильное название сервиса}\Providers\Microsoft.ACE.OLEDB.12.0] После этого работает только в 3 комбинациях из 4:
Читать пытаюсь так так: select * from openrowset('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=\\server\share\file.xls', 'SELECT * FROM [Sheet1$]') Я являюсь админом: 1) Домена, 2) Машины, на которой работает SQL-сервер, 3) Машины, где расположен файл Excel (\\server). При этом у меня есть все права на каталог TEMP того пользователя, из-под которого работает SQL-Server: exec master..xp_cmdshell 'echo hello > %TEMP%\hello.txt' exec master..xp_cmdshell 'dir %TEMP%' Вижу файл Directory of C:\Users\{пользователь, из-под которого работает SQL Server}\AppData\Local\Temp\hello.txt. Также есть права на запись в каталог, где лежит файл Excel: exec master..xp_cmdshell 'echo hello > \\server\share\hello.txt' exec master..xp_cmdshell 'dir \\server\share\' Вижу файл \\server\share\hello.txt. Если копирую файл file.xls локально (например, в C:\TEMP\, на который есть все права у всех), то из него читаются данные всегда (и при аутентификации Windows, и при аутентификации SQL Server). Если логинюсь с аутентификацией SQL Servers (пользователь абсолютно бесправный), то данные опять читаются всегда (и с локального диска, и с удалённой шары). А в случае удалённой шары и Windows Authentication -- нет. Где-то читал, что надо настроить Kerberos Delegation, но как? |
2 мар 15, 15:05 [17332075] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
http://www.excel-sql-server.com/excel-import-to-sql-server-using-distributed-queries.htm |
2 мар 15, 15:30 [17332260] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |