Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 использование в одном запросе 2 сервера БД  [new]
mejikop
Member

Откуда:
Сообщений: 11
Добрый день. имеется 2 сервера БД для разных программ (АСБ диасофт и ДБО Ibank2).

Работая с базой данных Диасофта, нужно в ней создать временную таблицу и в ней записать результат запроса выполненого на базе ibank.
Попробовал следующий вариант с использованием sp_addlinkedserver
EXEC sp_addlinkedserver 'ibank2', N'SQL Server'
 
EXEC sp_addlinkedsrvlogin  
   @rmtsrvname = 'ibank2',  
   @useself = 'false',  
   @rmtuser = 'sa',  
   @rmtpassword = '%?:*(?:%'

--
create table  dbo.#tmp	(dateb			datetime,
						 lost			numeric,
					 brief			CHAR(20))
declare   @datea           datetime

   select @datea = '07.22.2013'
insert into dbo.#tmp  

select		accs.saldo_date as dateb, 
			accs.remainder as lost,  
			acc.account as brief
		
	from	ibank2.ibank2.ibank2.accounts acc, 
			ibank2.ibank2.ibank2.accs_saldo accs
	where	acc.id = accs.account_id and 
			-- acc.id=1878 and
			accs.saldo_date = (
					SELECT	MAX(f.saldo_date) 
						from	ibank2.ibank2.ibank2.accs_saldo f 
						where	acc.id=f.account_id and 
								f.saldo_date<=@datea)
						order by acc.account
select * from dbo.#tmp
drop table  #tmp
EXEC sp_droplinkedsrvlogin 'ibank2', NULL
EXEC sp_dropserver 'ibank2', droplogins


Получаю следующую ошибку:

Сообщение 8180, уровень 16, состояние 1, строка 1
Statement(s) could not be prepared.
Сообщение 107, уровень 16, состояние 2, строка 1
The column prefix 'Tbl1005' does not match with a table name or alias name used in the query.


Не подскажите в чем может быть проблема, или может быть, более правильный способ реализации.
23 авг 13, 15:38    [14748348]     Ответить | Цитировать Сообщить модератору
 Re: использование в одном запросе 2 сервера БД  [new]
Гость333
Member

Откуда:
Сообщений: 3683
mejikop
	from	ibank2.ibank2.ibank2.accounts acc, 
			ibank2.ibank2.ibank2.accs_saldo accs

То есть на сервере ibank2 есть база данных ibank2, в которой есть схема ibank2, в которой находятся объекты accounts и accs_saldo? При этом запрос не работает?
23 авг 13, 15:43    [14748364]     Ответить | Цитировать Сообщить модератору
 Re: использование в одном запросе 2 сервера БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
вы хотите сказать, что вот это

select* from ibank2.ibank2.ibank2.accounts acc

работает ?
23 авг 13, 15:49    [14748395]     Ответить | Цитировать Сообщить модератору
 Re: использование в одном запросе 2 сервера БД  [new]
mejikop
Member

Откуда:
Сообщений: 11
Гость333
mejikop
	from	ibank2.ibank2.ibank2.accounts acc, 
			ibank2.ibank2.ibank2.accs_saldo accs

То есть на сервере ibank2 есть база данных ibank2, в которой есть схема ibank2, в которой находятся объекты accounts и accs_saldo? При этом запрос не работает?


Да вы совершенно правы.
23 авг 13, 16:10    [14748506]     Ответить | Цитировать Сообщить модератору
 Re: использование в одном запросе 2 сервера БД  [new]
mejikop
Member

Откуда:
Сообщений: 11
Glory
вы хотите сказать, что вот это

select* from ibank2.ibank2.ibank2.accounts acc

работает ?


Да если взять просто конструкцию


EXEC sp_addlinkedserver 'ibank2', N'SQL Server'
 
EXEC sp_addlinkedsrvlogin  
   @rmtsrvname = 'ibank2',  
   @useself = 'false',  
   @rmtuser = 'sa',  
   @rmtpassword = '$%^&'
select* from ibank2.ibank2.ibank2.accounts acc


то она работает
23 авг 13, 16:12    [14748517]     Ответить | Цитировать Сообщить модератору
 Re: использование в одном запросе 2 сервера БД  [new]
Гость333
Member

Откуда:
Сообщений: 3683
mejikop
The column prefix 'Tbl1005' does not match with a table name or alias name used in the query.

А где в тексте вашего запроса упоминается Tbl1005?
23 авг 13, 16:19    [14748576]     Ответить | Цитировать Сообщить модератору
 Re: использование в одном запросе 2 сервера БД  [new]
Rem
Member

Откуда:
Сообщений: 261
Гость333
mejikop
The column prefix 'Tbl1005' does not match with a table name or alias name used in the query.

А где в тексте вашего запроса упоминается Tbl1005?


А это уже, похоже, сиквел-сервер при запросе к разным серверам на прилинкованном сервере "придумывает" некие синонимы.
Обращал у себя на это внимание тоже.
23 авг 13, 16:25    [14748631]     Ответить | Цитировать Сообщить модератору
 Re: использование в одном запросе 2 сервера БД  [new]
Rem
Member

Откуда:
Сообщений: 261
mejikop,

Не пробовали обойтись без коррелирующего подзапроса?
Или вообще, сделайте на ibank свою хранимку, которая будет возвращать всё, что вам надо. На сервере Диасофт дергайте хранимку.
23 авг 13, 16:38    [14748736]     Ответить | Цитировать Сообщить модератору
 Re: использование в одном запросе 2 сервера БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
insert into dbo.#tmp  
select * from openquery(ibank2, 
'select		accs.saldo_date as dateb, 
			accs.remainder as lost,  
			acc.account as brief
		
	from	ibank2.ibank2.accounts acc, 
			ibank2.ibank2.accs_saldo accs
	where	acc.id = accs.account_id and 
			-- acc.id=1878 and
			accs.saldo_date = (
					SELECT	MAX(f.saldo_date) 
						from	ibank2.ibank2.accs_saldo f 
						where	acc.id=f.account_id and 
								f.saldo_date<=@datea)
						order by acc.account')
23 авг 13, 21:27    [14749732]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить