Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 linked server  [new]
Любитель связ серверов
Guest
Добрый вечер!
Одна хранимка такая (маленькая, ибо тест):
+

ALTER PROCEDURE dbo._Test2 
	@FileName varchar(127) = null,
	@DataSheet varchar(128) = null,
	@d varchar(14) = null
AS
	 SET NOCOUNT on
  declare 	@s varchar(4000)
  
  if exists(select * from sys.servers s where s.[name] = N'tstt')
  EXEC master.dbo.sp_dropserver @server=N'tstt', @droplogins='droplogins'
    
  EXEC sp_addlinkedserver 'tstt',
	'Jet 4.0',
	'Microsoft.Jet.OLEDB.4.0', 
	@FileName,
	NULL,
	'Excel 8.0'	 

	EXEC master.dbo.sp_addlinkedsrvlogin 
	@rmtsrvname=N'tstt',
	@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
	

вторая хранимка такая :
+

ALTER PROCEDURE dbo._Test 
	@FileName varchar(127) = null,
	@DataSheet varchar(128) = null,
	@d varchar(14) = null
AS
	 SET NOCOUNT on
  declare 	@s varchar(4000)
  
if object_id('ttt') is not null 
 drop table ttt

	select --top 100 
	  @d as Data,
	  substring([Наименование таблицы], 1, charindex(' - ', [Наименование таблицы], 1) - 1) as Account,
	  [F2] as Asset,
	  [F3] as Krd_Begin,
	  [F4] as Krd_End,
	  [F5] as Deb_Oborot,
	  [F6] as Krd_Oborot,
	  [Наименование таблицы] as [FullText]
	into ttt  
	from tstt...Лист1$ 
	where [F2] is not null
	and [F3] is not null
	and [F4] is not null
	and [F5] is not null
	and [F6] is not null
	and [Наименование таблицы] <> 'Счета Депо Депонентов'

Приведенные выше ХП на удаленном сервере.
На своём сервер выполняю следующее :
exec srv.SPD.dbo._Test2 @FileName = '\\srv\dpo\20090507.xls'
execute srv.SPD.dbo._Test @FileName = '\\srv\dpo\20090507.xls',
	@DataSheet = 'Лист1',
	@d = '20090507'
select * from srv.SPD.dbo.ttt

Получаю вот что:
Msg 7303, Level 16, State 1, Procedure _Test, Line 15
Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "tstt".
Msg 7399, Level 16, State 1, Procedure _Test, Line 15
The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "tstt" reported an error. Authentication failed.
OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "tstt" returned message "Не удается запустить приложение. Системная база данных отсутствует или открыта с монопольным доступом другим пользователем.".

Если выполню на сервере, который подключен как линкованный это :
exec dbo._Test2 @FileName = '\\srv\dpo\20090507.xls'
exec dbo._Test @FileName = '\\srv\dpo\20090507.xls',
	@DataSheet = 'Лист1',
	@d = '20090507'
	select * from ttt
, то все работает.
Подскажите плз, почему ошибка!
8 июн 09, 20:06    [7278371]     Ответить | Цитировать Сообщить модератору
 Re: linked server  [new]
Любитель связ серверов
Guest
По правам.
Линкованный сервер настроен на подключение к удаленному используя серверный логин TestLogin с серверной ролью sysadmin.
Я локальный администратор на обоих серверах.
Execute as нигде не используется.

Excel файл лежит в каталоге в сети, доступ к которому разрешен с обоих серверов и оба сервера "видят" эти каталоги.

Сервер srv
Microsoft SQL Server 2005 - 9.00.4220.00 (X64) Apr 2 2009 18:34:24 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)

Линкованный сервер
Microsoft SQL Server 2005 - 9.00.4220.00 (Intel X86) Apr 2 2009 18:42:07 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
8 июн 09, 20:12    [7278382]     Ответить | Цитировать Сообщить модератору
 Re: linked server  [new]
Любитель связ серверов
Guest
Поднимаем тему :)

Проблема :
есть Microsoft SQL Server 2005 - 9.00.4220.00 (X64). Нужно считать данные из текстовых файлов, файлов Excel.
На 32битном сервере это решалось через линкованный сервер или так :

select * from openrowset(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0; HDR=Yes; IMEX=0; Database='\\сервер\файл', [Лист$])
На 64 битах никак не получается .

Что сделано:
на сервере поднят 32бит SQL2008express (вторым инстансом)
на Express создана БД и две хранимки. Одна создаёт линкованный сервер по переданным ей параметрам (по сути, передаётся имя Excel файла),
вторая вынимает данные из этого файла по созданному линкованному серверу.
С 64 бит сервера сделан линкованный сервер на Express, при помощи которого вызываются эти хп.
Проблема в том, что
sp_addlinkedserver
внутри
begin tran..commit
выполнять нельзя, так что первая хранимка в транзакции отработать не может.

Если первую ХП не выполнять, а выборку внутри второй ХП делать через

select * from openrowset(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0; HDR=Yes; IMEX=0; Database='\\сервер\файл', [Лист$]),

то без транзакции также все работает, а внутри
begin tran..commit 
отлетает с ошибкой
Msg 7390, Level 16, State 2, Line 1
The requested operation could not be performed because OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)"
does not support the required transaction interface.

Подскажите плиз, в какую сторону смотреть.
p.s. MSDTC настроен, пошел пока копать в сторону BULK с 32 битного сервака.
9 июн 09, 11:31    [7279824]     Ответить | Цитировать Сообщить модератору
 Re: linked server  [new]
Любитель связ серверов
Guest
ап?
есть тут кто?
9 июн 09, 14:53    [7281234]     Ответить | Цитировать Сообщить модератору
 Re: linked server  [new]
Евгений_Анатольевич
Member

Откуда:
Сообщений: 221
а из какой версии офиса файл? имхо, строка соединения неверная.. но нужно более подробная инфа о файле: в какой среде создан. и какой оффис на машине где импорт делаете.
9 июн 09, 15:53    [7281708]     Ответить | Цитировать Сообщить модератору
 Re: linked server  [new]
Евгений_Анатольевич
Member

Откуда:
Сообщений: 221
+
'user_id' ; 'password' - где в запрсе к файлу?
9 июн 09, 15:59    [7281749]     Ответить | Цитировать Сообщить модератору
 Re: linked server  [new]
Любитель связ серверов
Guest
Евгений_Анатольевич
а из какой версии офиса файл? имхо, строка соединения неверная.. но нужно более подробная инфа о файле: в какой среде создан. и какой оффис на машине где импорт делаете.

Ну вот, спасибо, хоть кто-то есть!
Версия 2003.
9 июн 09, 16:09    [7281820]     Ответить | Цитировать Сообщить модератору
 Re: linked server  [new]
Любитель связ серверов
Guest
Евгений_Анатольевич
+
'user_id' ; 'password' - где в запрсе к файлу?

Не понял. Это зачем?
9 июн 09, 16:09    [7281830]     Ответить | Цитировать Сообщить модератору
 Re: linked server  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10937
было нечто похожее когда пытался выпонить в транзакции между тремя серверами
1 эксель,
2 32 экспресс
3 64 сам сервак

хотел запуская хранимку в экспрессе сразу положить на сервак - получал подобные ошибки.
если записывать в таблицу в самом экспрессе - без проблем.

в итоге сделал в экспрессе вьюшки к экселю а процедура которая тянет из них данные на основном серваке.

в вашем случае возможно имеет смысл созавать вьюшки программно
10 июн 09, 11:25    [7284623]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить