Работа с Linked Server'ом в MSSQL

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Работа с Linked Server'ом в MSSQL

Сообщение Ennor » 26.05.2004 (Ср) 17:11

Собственно, проблема в том, как правильно квалифицировать объекты, лежащие на той стороне. У меня есть сиквел, на нем прилинкована база MySQL. Есть сиквеловский юзер, предназначенный для работы с линком, есть мускульные логин и пользователь, которые там все могут, типа. Но вот как именно достучаться до этих данных, чтобы, допустим, обычный INNER JOIN составить? Я понимаю, что все дело в RTFM, но что-то я в BoL не нашел нифига. Наверное, плохо искал.

Пробовал писать link_name.link_user..table_name - не работает. Все или почти все комбинации перебрал - не работает. Пробовал через OPENQUERY(), причем запрос копировал из EMS MySQL Manager, на мускуле он гарантированно рабочий - не получается, пишет Incorrect syntax near 'link_name'.

Буду рад любой помощи, заранее спасибо.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 26.05.2004 (Ср) 18:33

Для полноты картины отвечу сам себе :) :
Все заработало через OPENQUERY(), как только я перестал писать имя линкед сервера в кавычках - вот ведь переглючивает иногда :shock:

Тем не менее, вопрос с квалификацией имени таблицы в обычном селекте остается открытым...

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 27.05.2004 (Чт) 18:13

Так ты сервер линковал или базу?

Чтобы не путаться, напишу, как у меня.
Допустим, с моего сервера, к которому коннект, есть линк на ServerX
Тогда полное имя выглядит так: [ServerX].[DB_Name].dbo.[Table_Name]
Попробуй [link_name]...[Table_Name]
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 28.05.2004 (Пт) 10:33

У тебя сиквел к сиквелу прилинкован? Если так, то может и заработает, не знаю. Просто у меня линкуется MySQL, и там в плане понятий схема/каталог полнейшая несуразица, с точки зрения сиквела.
Кроме того, реально ведь линкуется не сервер, а конкретная база на нем - поле Catalog в свойствах линка. Или я чего-то не понимаю?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 28.05.2004 (Пт) 11:56

А у тебя в разделе Security\Linked Servers\ServerX\Tables видны таблицы твоего прилинкованного сервера ServerX?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 28.05.2004 (Пт) 12:06

Ennor, я проверила на Access - прилинковала Northwind
замечательно исполнился запрос "select * from MyBase...Customers" - MyBase (имя линка)
c MySQL не работала никогда - возможно, есть тонкости

А вот посмотреть, видны ли таблицы - это очень здравая мысль - так ты проверишь, что линк живой.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 28.05.2004 (Пт) 15:01

Линк гарантированно живой - через OPENQUERY() все работает. Видимо, дело в особенностях объектной концепции мускула. Хотя синтаксис у него явно с Транзакта списанный - ну просто один в один...

2 Konst_One: Видны таблицы (и вьюхи) прилинкованной базы этого сервера. Точнее, из SQLEM видны только их названия :) - пункта Open Table там нет, только Copy и Help.

Я пробовал практически все варианты с явной и неявной квалификацией. Максимум, что я смог получить (полная квалификация), было вот что:
SQL Query Analyzer писал(а):Server: Msg 7312, Level 16, State 1, Line 1
Invalid use of schema and/or catalog for OLE DB provider 'MSDASQL'. A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog and/or schema.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 30.05.2004 (Вс) 15:18

Хм. Если я не прав, то пусть меня поправят, но рискну высказать предположение, что использование полной квалификации таблиц в обычном селекте работает только в том случае, если используется OLEDB-провайдер. В случае работы через ODBC остается использовать только OPENQUERY(), который, видимо, работает всегда, т.к. просто тупо отправляет запрос на сервер, не разбираясь в его деталях.

Может, оно, конечно, и не так, но уж очень похоже...


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 2

    TopList  
cron