Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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 Получаю следующую ошибку:
Не подскажите в чем может быть проблема, или может быть, более правильный способ реализации. |
||
23 авг 13, 15:38 [14748348] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
То есть на сервере ibank2 есть база данных ibank2, в которой есть схема ibank2, в которой находятся объекты accounts и accs_saldo? При этом запрос не работает? |
||
23 авг 13, 15:43 [14748364] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
вы хотите сказать, что вот это select* from ibank2.ibank2.ibank2.accounts acc работает ? |
23 авг 13, 15:49 [14748395] Ответить | Цитировать Сообщить модератору |
mejikop Member Откуда: Сообщений: 11 |
Да вы совершенно правы. |
||||
23 авг 13, 16:10 [14748506] Ответить | Цитировать Сообщить модератору |
mejikop Member Откуда: Сообщений: 11 |
Да если взять просто конструкцию 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] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
А где в тексте вашего запроса упоминается Tbl1005? |
||
23 авг 13, 16:19 [14748576] Ответить | Цитировать Сообщить модератору |
Rem Member Откуда: Сообщений: 261 |
А это уже, похоже, сиквел-сервер при запросе к разным серверам на прилинкованном сервере "придумывает" некие синонимы. Обращал у себя на это внимание тоже. |
||||
23 авг 13, 16:25 [14748631] Ответить | Цитировать Сообщить модератору |
Rem Member Откуда: Сообщений: 261 |
mejikop, Не пробовали обойтись без коррелирующего подзапроса? Или вообще, сделайте на ibank свою хранимку, которая будет возвращать всё, что вам надо. На сервере Диасофт дергайте хранимку. |
23 авг 13, 16:38 [14748736] Ответить | Цитировать Сообщить модератору |
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 | ![]() |